C 语言 学习笔记

1. 头文件

1
2
#include <stdio.h> //输入输出
#include <stdbool.h> //布尔

2. 框架

1
2
3
int main(){
//code
}

3. 变量,数组

不能以数字开头

不能是关键字

不能有空格

3.1 一维数组

1
2
int array[3] = {1,2,3}; //中括号内填元素的数量
printf("%d",array[0]); //调用时是从0开始

3.2 二维数组

1
2
int array[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //左边行,右边列
printf("%d",array[0][0]); //调用时是从0开始

4. 输出

1
printf(); //输出格式化

换行符 /n

5. 整型

1
2
3
4
int //short int
long //long int
unsigned int //非负整数,int正数范围扩大一倍
%d

6. 浮点型

1
2
3
4
float
double
%f
%.nf//保留小数点后n位。有时四舍五入。

7. 字符型

1
2
char
%c

8. 布尔型

1
2
3
4
#include <stdbool.h> //布尔

bool
%d //true,false对应1,0

9. 运算符

  1. 第一优先级:
    • [] 数组下标
    • () 圆括号 (用于函数调用或改变优先级)
    • . 成员选择运算符(结构体或联合体)
    • -> 成员选择运算符(通过指针访问结构体或联合体成员)
  2. 第二优先级:
    • - 负号(单目运算符)
    • ! 逻辑非
    • ~ 按位取反
    • & 取地址
    • * 间接访问(指针解引用)
    • ++ 自增
    • -- 自减
    • (type) 强制类型转换
    • sizeof 计算类型或表达式的大小
    • _Alignof (C11) 计算类型的对齐要求
  3. 第三优先级:
    • * 乘法
    • / 除法
    • % 取模
  4. 第四优先级:
    • + 加法
    • - 减法
  5. 第五优先级:
    • << 左移
    • >> 右移
  6. 第六优先级:
    • < 小于
    • <= 小于等于
    • > 大于
    • >= 大于等于
  7. 第七优先级:
    • == 等于
    • != 不等于
  8. 第八优先级:
    • & 按位与
  9. 第九优先级:
    • ^ 按位异或
  10. 第十优先级:
    • | 按位或
  11. 第十一优先级:
    • && 逻辑与
  12. 第十二优先级:
    • || 逻辑或
  13. 第十三优先级:
    • ? : 条件运算符
  14. 第十四优先级:
    • = 赋值
    • +=, -= 简写赋值
    • *=, /=, %=
    • &=, ^=, |=
    • <<=, >>=
  15. 第十五优先级:
    • , 逗号运算符

结合律

  • 左结合性:大多数运算符都是左结合性的,这意味着它们从左向右进行计算。
  • 右结合性:少数运算符如赋值运算符和单目运算符是右结合性的,这意味着它们从右向左进行计算。

10. 判断

1
2
3
4
5
6
7
if(){
//code
}else if(){
//code
}else{
//code
}
1
2
3
4
5
6
7
8
9
10
switch(){
case 1: //如果常量的值与表达式的值相等,那就执行该代码块
//code
break; //容易漏
case 2:
//code
break;
default: //上面都不满足的话执行这个
//code
}

11. 条件运算符

b = (a>5)?1:0

1
2
3
4
5
if(a>5){
b = 1;
}else{
b = 0;
}

12.for 循环

1
2
3
for(int i=0; i<5; i++){
//code
}

13.while 循环

1
2
3
4
int i = 0;
while(i<5){
//code
}

14.do-while 循环

1
2
3
do{
//code
}while(i<5); //不能漏分号

至少会执行一次,先执行一次 然后判断再执行。

15. 循环的控制

break 跳出当层循环

continue 跳出本层循环的剩余语句,然后进入下一次循环

16.goto (避免使用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

int main() {
int i = 0;

start:
i++;
if (i == 5) {
goto end;
}
printf("i = %d\n", i);
if (i < 10) {
goto start;
}

end:
printf("Loop ended.\n");
return 0;
}

17. 函数

1
2
3
4
int Func(int para1, int para2){
//code
return 0; //返回的值的类型要与定义的一致,返回值非必要
}
1
2
3
void Func(int para1, int para2){
//code 不允许返回值
}

18. 指针

1
2
3
4
5
6
7
8
int a = 10, b = 15;
int *ptr;

ptr = &a;
printf("%d",*ptr);

ptr = &b;
printf("%d",*ptr);