C语言基础知识大全
C语言是一种功能强大、高效且通用的编程语言,广泛应用于系统编程、嵌入式开发、操作系统等领域。以下是C语言基础知识的全面
1. 基本语法
1.1 注释
- 单行注释:// 注释内容
- 多行注释:/* 注释内容 */
1.2 标识符
- 由字母、数字和下划线组成,且不能以数字开头。
- 区分大小写,如var
和Var
是两个不同的标识符。
1.3 关键字
- C语言有32个关键字,如int
、return
、if
、else
等,不能用作标识符。
2. 数据类型
2.1 基本数据类型
| 类型 | 描述 | 大小(典型) |
|------------|-------------------------------|--------------|
| int
| 整数类型 | 4字节 |
| char
| 字符类型 | 1字节 |
| float
| 单精度浮点类型 | 4字节 |
| double
| 双精度浮点类型 | 8字节 |
| void
| 无类型(用于函数返回类型等) | - |
2.2 派生数据类型
- 数组(Array)
- 指针(Pointer)
- 结构体(Struct)
- 共用体(Union)
- 枚举(Enum)
示例:
int numbers[5]; // 整数数组
struct Point {
int x;
int y;
}; // 结构体
3. 变量与常量
3.1 变量声明
- 语法:数据类型 变量名;
- 示例:int age;
3.2 变量初始化
- 示例:int age = 25;
3.3 常量
- 使用const
关键字声明常量:const int MAX = 100;
- 宏定义常量:#define PI 3.14159
4. 运算符
4.1 算术运算符
- +
、-
、*
、/
、%
(取模)
4.2 关系运算符
- ==
、!=
、>
、<
、>=
、<=
4.3 逻辑运算符
- &&
(与)、||
(或)、!
(非)
4.4 位运算符
- &
(按位与)、|
(按位或)、^
(按位异或)、~
(按位取反)、<<
(左移)、>>
(右移)
4.5 赋值运算符
- =
、+=
、-=
、*=
、/=
、%=
4.6 其他运算符
- 条件运算符(三元运算符):条件 ? 表达式1 : 表达式2
- sizeof
运算符:获取数据类型或变量的大小。
5. 控制结构
5.1 条件语句
- if
语句:
if (condition) {
// 代码块
}
- if-else
语句:
if (condition) {
// 代码块1
} else {
// 代码块2
}
- switch
语句:
switch (variable) {
case value1:
// 代码块1
break;
case value2:
// 代码块2
break;
default:
// 默认代码块
}
5.2 循环语句
- for
循环:
for (int i = 0; i < 10; i++) {
// 代码块
}
- while
循环:
while (condition) {
// 代码块
}
- do-while
循环:
do {
// 代码块
} while (condition);
5.3 跳转语句
- break
:跳出循环或switch
语句。
- continue
:跳过当前循环的剩余部分,继续下一次循环。
- goto
:无条件跳转到指定标签(不推荐使用)。
- return
:从函数返回。
6. 函数
6.1 函数定义
- 语法:
返回类型 函数名(参数列表) {
// 函数体
}
- 示例:
int add(int a, int b) {
return a + b;
}
6.2 函数声明(原型)
- 用于在函数调用前声明函数:
int add(int a, int b);
6.3 递归函数
- 函数调用自身,如计算阶乘:
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
7. 数组
7.1 一维数组
- 声明与初始化:
int numbers[5] = {1, 2, 3, 4, 5};
- 访问数组元素:numbers[0]
(个元素)
7.2 多维数组
- 声明与初始化:
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
- 访问数组元素:matrix[1][2]
(第二行第三列)
8. 指针
8.1 指针声明
- 语法:数据类型 *指针名;
- 示例:int *ptr;
8.2 指针操作
- 取地址运算符:&
- 解引用运算符:*
- 示例:
int num = 10;
int *ptr = # // ptr指向num的地址
printf("%d", *ptr); // 输出10
8.3 指针与数组
- 数组名即数组首元素的地址。
- 示例:
int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers; // ptr指向数组首元素
9. 字符串
9.1 字符数组
- 声明与初始化:
char str[6] = "Hello"; // 最后一个字符是'\0'
9.2 字符串函数
- strlen()
:获取字符串长度。
- strcpy()
:复制字符串。
- strcat()
:连接字符串。
- strcmp()
:比较字符串。
10. 结构体与共用体
10.1 结构体
- 声明与初始化:
struct Point {
int x;
int y;
};
struct Point p = {10, 20};
10.2 共用体
- 所有成员共享同一块内存:
union Data {
int i;
float f;
};
11. 文件操作
11.1 文件打开与关闭
- fopen()
:打开文件,如FILE *fp = fopen("file.txt", "r");
- fclose()
:关闭文件。
11.2 文件读写
- fscanf()
:从文件读取数据。
- fprintf()
:向文件写入数据。
- fgets()
:读取一行数据。
- fputs()
:写入一行数据。
12. 预处理指令
12.1 宏定义
- #define PI 3.14159
12.2 条件编译
- #ifdef
、#ifndef
、#else
、#endif
12.3 包含头文件
- #include <stdio.h>
(标准输入输出库)
- #include "myheader.h"
(自定义头文件)
13. 内存管理
13.1 动态内存分配
- malloc()
:分配内存。
- calloc()
:分配并初始化内存。
- realloc()
:重新分配内存。
- free()
:释放内存。
14. 示例程序
简单的C程序:
```c
include
int main() {
printf("Hello, World!\n");
return 0;
}
```
15. 常见问题与注意事项
- 内存泄漏:动态分配的内存未释放。
- 数组越界:访问数组时超出其边界。
- 空指针:使用未初始化的指针。
- 类型转换:不同类型之间的转换可能导致数据丢失。
16. 学习建议
- 实践:多写代码,解决实际问题。
- 阅读源码:学习优秀的C语言代码。
- 理解底层:了解C语言与计算机硬件的关系。
C语言是一门需要不断实践和深入理解的编程语言。通过掌握上述基础知识,并持续练习,你将能够熟练运用C语言进行各种编程任务。