C语言有一套清晰的语法规则,就像自然语言的语法一样。东巴文(db-w.cn) 将带你系统学习C语言的基础语法,为后续学习打下坚实基础。
💡 东巴文观点:语法是编程语言的基础,就像建筑的地基。地基打得牢,房子才能建得高。
关键字是C语言预先定义的、有特殊含义的单词,不能用作变量名或其他标识符。
东巴文关键字分类表:
| 关键字 | 含义 | 东巴文示例 |
|---|---|---|
char |
字符类型 | char c = 'A'; |
short |
短整型 | short s = 100; |
int |
整型 | int i = 42; |
long |
长整型 | long l = 100000L; |
float |
单精度浮点 | float f = 3.14f; |
double |
双精度浮点 | double d = 3.14159; |
signed |
有符号 | signed int si = -10; |
unsigned |
无符号 | unsigned int ui = 10; |
struct |
结构体 | struct Point {int x; int y;}; |
union |
联合体 | union Data {int i; float f;}; |
enum |
枚举 | enum Color {RED, GREEN, BLUE}; |
void |
无类型 | void func(); |
| 关键字 | 含义 | 东巴文示例 |
|---|---|---|
if |
如果 | if (x > 0) {...} |
else |
否则 | if (x > 0) {...} else {...} |
switch |
开关 | switch (x) {...} |
case |
情况 | case 1: ... |
default |
默认 | default: ... |
for |
循环 | for (int i = 0; i < 10; i++) |
while |
循环 | while (x > 0) {...} |
do |
循环 | do {...} while (x > 0); |
break |
跳出 | break; |
continue |
继续 | continue; |
goto |
跳转 | goto label; |
return |
返回 | return 0; |
| 关键字 | 含义 | 东巴文说明 |
|---|---|---|
auto |
自动变量 | 默认,通常省略 |
extern |
外部变量 | 声明外部定义的变量 |
register |
寄存器变量 | 建议存储在寄存器 |
static |
静态变量 | 延长生命周期 |
typedef |
类型定义 | 给类型起别名 |
| 关键字 | 含义 | 东巴文示例 |
|---|---|---|
const |
常量 | const int MAX = 100; |
sizeof |
大小 | sizeof(int) |
volatile |
易变 | volatile int flag; |
东巴文提示:C语言只有32个关键字(C99标准),非常简洁。
标识符是用来命名变量、函数、数组、类型等的名字。
东巴文命名规则:
int age; // 字母开头
int student_name; // 包含下划线
int value1; // 包含数字
int _count; // 下划线开头
int MAX_SIZE; // 全大写(常量)
int 2nd_place; // 数字开头
int my-var; // 包含连字符
int int; // 使用关键字
int my var; // 包含空格
int @email; // 包含特殊字符
东巴文命名建议:
int studentAge;
void calculateTotal();
struct StudentInfo {
char name[50];
int age;
};
typedef struct StudentInfo StudentInfo;
#define MAX_SIZE 100
const int BUFFER_SIZE = 1024;
// ✅ 好的命名
int studentCount;
float averageScore;
char userName[50];
// ❌ 不好的命名
int a;
float b;
char c[50];
东巴文金句:好的命名是代码自文档化的第一步。
// 这是单行注释
int age = 25; // 这也是单行注释
/*
* 这是多行注释
* 可以跨越多行
* 用于详细说明
*/
int calculateSum(int a, int b) {
return a + b;
}
东巴文注释原则:
// 计算圆的面积
// 参数:radius - 圆的半径
// 返回:圆的面积
float calculateArea(float radius) {
return 3.14159 * radius * radius;
}
// TODO: 需要添加错误处理
// FIXME: 这里可能有内存泄漏
int age = 25; // 设置age为25(废话注释)
// i是循环变量(显而易见)
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
}
东巴文提示:注释应该解释"为什么",而不是"是什么"。
语句是C程序的基本执行单位,以分号 ; 结尾。
x = 10; // 赋值语句
y = x + 5; // 算术表达式
printf("Hello"); // 函数调用语句
{
int x = 10;
int y = 20;
printf("Sum: %d\n", x + y);
}
if (x > 0) {
printf("Positive\n");
}
for (int i = 0; i < 10; i++) {
printf("%d\n", i);
}
; // 什么都不做
东巴文提示:空语句有时用于占位,但要小心误用。
代码块是用花括号 {} 括起来的一组语句。
int main() {
int x = 10; // x的作用域开始
{
int y = 20; // y的作用域开始
printf("x=%d, y=%d\n", x, y);
} // y的作用域结束
// printf("y=%d\n", y); // 错误:y不可见
printf("x=%d\n", x); // 正确:x可见
return 0;
} // x的作用域结束
if (score >= 60) {
// 代码块组织相关语句
printf("恭喜!\n");
printf("你通过了考试。\n");
passed_count++;
}
| 分隔符 | 用途 | 东巴文示例 |
|---|---|---|
; |
语句结束 | int x = 10; |
, |
分隔列表项 | int a, b, c; |
() |
函数参数、表达式 | func(a, b) |
{} |
代码块 | { int x = 10; } |
[] |
数组下标 | arr[0] |
. |
结构体成员 | student.name |
-> |
指针成员 | ptr->name |
东巴文运算符大全:
| 运算符 | 含义 | 示例 | 东巴文说明 |
|---|---|---|---|
+ |
加法 | 5 + 3 → 8 |
基本运算 |
- |
减法 | 5 - 3 → 2 |
基本运算 |
* |
乘法 | 5 * 3 → 15 |
基本运算 |
/ |
除法 | 5 / 3 → 1 |
整数除法取整 |
% |
取模 | 5 % 3 → 2 |
余数运算 |
| 运算符 | 含义 | 示例 | 东巴文说明 |
|---|---|---|---|
== |
等于 | 5 == 5 → 1 |
注意双等号 |
!= |
不等于 | 5 != 3 → 1 |
逻辑判断 |
< |
小于 | 5 < 3 → 0 |
逻辑判断 |
> |
大于 | 5 > 3 → 1 |
逻辑判断 |
<= |
小于等于 | 5 <= 5 → 1 |
逻辑判断 |
>= |
大于等于 | 5 >= 3 → 1 |
逻辑判断 |
| 运算符 | 含义 | 示例 | 东巴文说明 |
|---|---|---|---|
&& |
逻辑与 | 1 && 0 → 0 |
两者都真才真 |
|| |
逻辑或 | 1 || 0 → 1 |
有一真就真 |
! |
逻辑非 | !1 → 0 |
真变假,假变真 |
| 运算符 | 含义 | 示例 | 等价形式 |
|---|---|---|---|
= |
赋值 | x = 5 |
- |
+= |
加赋值 | x += 3 |
x = x + 3 |
-= |
减赋值 | x -= 3 |
x = x - 3 |
*= |
乘赋值 | x *= 3 |
x = x * 3 |
/= |
除赋值 | x /= 3 |
x = x / 3 |
%= |
模赋值 | x %= 3 |
x = x % 3 |
| 运算符 | 含义 | 示例 | 东巴文说明 |
|---|---|---|---|
++ |
自增 | x++ 或 ++x |
前缀和后缀不同 |
-- |
自减 | x-- 或 --x |
前缀和后缀不同 |
前缀 vs 后缀:
int x = 5;
int a = ++x; // a=6, x=6(先加后用)
int y = 5;
int b = y++; // b=5, y=6(先用后加)
| 运算符 | 含义 | 示例 | 东巴文说明 |
|---|---|---|---|
& |
按位与 | 5 & 3 → 1 |
位运算 |
| |
按位或 | 5 | 3 → 7 |
位运算 |
^ |
按位异或 | 5 ^ 3 → 6 |
位运算 |
~ |
按位取反 | ~5 |
位运算 |
<< |
左移 | 5 << 1 → 10 |
相当于乘2 |
>> |
右移 | 5 >> 1 → 2 |
相当于除2 |
// 三目运算符
int max = (a > b) ? a : b; // 如果a>b,max=a,否则max=b
int x = (a = 3, b = 5, a + b); // x = 8
东巴文优先级表(从高到低):
| 优先级 | 运算符 | 东巴文记忆口诀 |
|---|---|---|
| 1 | () [] -> . |
括号成员第一 |
| 2 | ! ~ ++ -- sizeof |
单目运算第二 |
| 3 | * / % |
乘除模第三 |
| 4 | + - |
加减第四 |
| 5 | << >> |
移位第五 |
| 6 | < <= > >= |
关系第六 |
| 7 | == != |
等于不等第七 |
| 8 | & |
位与第八 |
| 9 | ^ |
位异或第九 |
| 10 | | |
位或第十 |
| 11 | && |
逻辑与十一 |
| 12 | || |
逻辑或十二 |
| 13 | ?: |
条件十三 |
| 14 | = += -= 等 |
赋值十四 |
| 15 | , |
逗号最后 |
东巴文建议:不确定优先级时,使用括号明确表达。
// 不确定时加括号
int result = (a + b) * (c + d); // 清晰明了
表达式是由运算符和操作数组成的、能计算出值的式子。
// 简单表达式
42
x
x + 5
// 复杂表达式
(a + b) * (c - d) / e
// 函数调用表达式
printf("Hello")
// 赋值表达式
x = 10
// 逗号表达式
(x = 5, y = 10, x + y)
// ❌ 错误
int x = 10
printf("%d\n", x);
// ✅ 正确
int x = 10;
printf("%d\n", x);
// ❌ 错误
int x = 10; // 中文分号
printf("x=%d\n", x); // 中文括号和分号
// ✅ 正确
int x = 10; // 英文分号
printf("x=%d\n", x); // 英文括号和分号
// ❌ 错误
if (x > 0 {
printf("Positive\n");
}
// ✅ 正确
if (x > 0) {
printf("Positive\n");
}
// ❌ 错误(逻辑错误)
if (x = 5) { // 这是赋值,不是比较!
printf("x is 5\n");
}
// ✅ 正确
if (x == 5) { // 这是比较
printf("x is 5\n");
}
东巴文提示:这是C语言最常见的错误之一!
// ✅ 推荐:4个空格
int main() {
if (x > 0) {
printf("Positive\n");
}
return 0;
}
// ✅ 推荐
int x = 10;
if (x > 0) {
printf("x = %d\n", x);
}
// ❌ 不推荐
int x=10;
if(x>0){
printf("x=%d\n",x);
}
// ✅ 推荐
int x = 10;
int y = 20;
// ❌ 不推荐
int x = 10; int y = 20;
东巴文命名规范:
| 类型 | 命名风格 | 示例 |
|---|---|---|
| 变量 | 小驼峰 | studentAge |
| 函数 | 小驼峰 | calculateSum |
| 常量 | 全大写+下划线 | MAX_SIZE |
| 类型 | 大驼峰 | StudentInfo |
| 宏 | 全大写+下划线 | BUFFER_SIZE |
完成本章学习后,请确认:
掌握基础语法后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📚 东巴文语法提示:语法是编程的基础,但不要死记硬背。多写代码,多练习,语法自然会熟练。在 db-w.cn,我们会通过大量实例帮你掌握C语言语法!