C 语言_基础语法全解析_深度细化版
一、C 语言基本结构
1.1 程序组成部分
一个完整的 C 程序由以下部分组成:
-
预处理指令:以
#
开头,在编译前处理#include <stdio.h> // 引入标准库 #define PI 3.14159 // 定义常量
-
全局变量声明:在所有函数外部定义的变量
int globalVar = 10; // 全局变量
-
函数定义:程序的基本模块
int add(int a, int b) { // 函数定义return a + b; }
-
主函数:程序入口点
int main() { // 主函数// 程序执行代码return 0; }
1.2 编译与执行流程
C 程序的生命周期:
- 编辑:编写
.c
源文件 - 预处理:处理
#
指令,生成.i
文件 - 编译:将
.i
文件转换为汇编代码.s
- 汇编:将汇编代码转换为目标代码
.o
- 链接:将目标代码与库文件链接,生成可执行文件
.exe
二、数据类型与变量
2.1 基本数据类型
类型 | 描述 | 范围示例 |
---|---|---|
char | 单字节字符 | -128 ~ 127 或 0 ~ 255 |
short | 短整型 | -32,768 ~ 32,767 |
int | 整型 | -2,147,483,648 ~ 2,147,483,647 |
long | 长整型 | 至少与int 相同范围 |
float | 单精度浮点数 | 6-7 位有效数字 |
double | 双精度浮点数 | 15-16 位有效数字 |
void | 无类型 | 用于函数返回值或指针 |
2.2 变量存储类
C 语言有四种存储类:
-
auto:默认存储类,局部变量
auto int a = 10; // 等价于 int a = 10;
-
static:静态变量,延长生命周期
void func() {static int count = 0; // 仅初始化一次count++; }
-
extern:声明外部变量
extern int sharedVar; // 声明在其他文件中定义的变量
-
register:建议编译器将变量存储在寄存器中
register int speed; // 用于高频访问的变量
三、运算符深度解析(含优先级)
3.1 算术运算符
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 3 | 1 |
% | 取模(取余) | 5 % 3 | 2 |
++ | 自增 | a=5; a++ | a=6 |
-- | 自减 | a=5; a-- | a=4 |
注意事项:
- 整数除法会截断小数部分
- 自增 / 自减运算符的前置和后置形式有区别:
int a = 5; printf("%d", a++); // 输出5,先使用后自增 printf("%d", ++a); // 输出7,先自增后使用
3.2 关系运算符
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
== | 等于 | 5 == 3 | 0 (假) |
!= | 不等于 | 5 != 3 | 1 (真) |
> | 大于 | 5 > 3 | 1 (真) |
< | 小于 | 5 < 3 | 0 (假) |
>= | 大于等于 | 5 >= 3 | 1 (真) |
<= | 小于等于 | 5 <= 3 | 0 (假) |
3.3 逻辑运算符
运算符 | 描述 | 示例 | 结果 | ||||
---|---|---|---|---|---|---|---|
&& | 逻辑与 | (5 > 3) && (4 > 2) | 1 (真) | ||||
` | ` | 逻辑或 | `(5 < 3) | (4 > 2)` | 1 (真) | ||
! | 逻辑非 | !(5 > 3) | 0 (假) |
逻辑短路特性:
// 如果第一个条件为假,第二个条件不会执行
if (0 && (1/0 == 0)) { // 不会触发除零错误printf("不会执行");
}// 如果第一个条件为真,第二个条件不会执行
if (1 || (1/0 == 0)) { // 不会触发除零错误printf("会执行");
}
3.4 位运算符
运算符 | 描述 | 示例 | 二进制解释 | 结果 | |||
---|---|---|---|---|---|---|---|
& | 按位与 | 5 & 3 | 0101 & 0011 | 0001 (1) | |||
` | ` | 按位或 | `5 | 3` | `0101 | 0011` | 0111 (7) |
^ | 按位异或 | 5 ^ 3 | 0101 ^ 0011 | 0110 (6) | |||
~ | 按位取反 | ~5 | ~0101 | 1010 (-6) | |||
<< | 左移 | 5 << 2 | 0101 << 2 | 010100 (20) | |||
>> | 右移 | 5 >> 1 | 0101 >> 1 | 0010 (2) |
3.5 赋值运算符
运算符 | 等价形式 | 示例 | 结果 |
---|---|---|---|
= | a = 5 | a=5 | |
+= | a = a + ... | a = 5; a += 3 | a=8 |
-= | a = a - ... | a = 5; a -= 3 | a=2 |
*= | a = a * ... | a = 5; a *= 3 | a=15 |
/= | a = a / ... | a = 6; a /= 3 | a=2 |
%= | a = a % ... | a = 5; a %= 3 | a=2 |
3.6 条件运算符(三元运算符)
语法:条件 ? 表达式1 : 表达式2
示例:
int a = 5, b = 3;
int max = (a > b) ? a : b; // max = 5
3.7 运算符优先级表
优先级 | 运算符类型 | 具体运算符 | 结合性 | ||
---|---|---|---|---|---|
1 | 后缀运算符 |