C语言笔记
笔记目录
一、优先级
1、优先级图表
2、运算方向
以下是自右向左运算
- 三目运算符
- 单目运算符
- 赋值运算符
二、指针字节大小
如果在32位平台,指针大小为4个字节
如果在84位平台,指针大小为8个字节
三、动态内存函数
注意如果没有释放内存,也就是没写free函数释放内存,没次运行就会占用没malloc或realloc申请的空间,将不会还给操作系统的堆区,该区间见无法访问。
1、malloc
2、realloc
3、free
链接:动态内存函数的用法
四、内存分布区域
内存分为五大区:代码区、栈区、全局变量区、堆区、字符常量区。
1.代码区:存放函数体的二进制代码,由操作系统进行管理的。
2.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。
3.全局静态区:存放全局变量和静态变量
4.堆区:由程序员分配和释放,若程序员不释放,程序结束后由操作系统回收。
5.文字常量区:为常量,无法修改,当程序结束才释放。
文字常量区
eg:
char *p = "abcdefg";//*p是无法修改的,相当与下面的
char const *p = "abcdefg";//以免发生报错,又无法知道错误错在哪,最好写这种样式
像这种"abcdefg"就是放在文字常量区,应为它并没有赋值给变量,而是用指针去指向它的地址。
五、结构体的内存大小计算
不同编译器的对齐系数不同,vs一般默认为8。
每个成员的地址相当于结构体变量第一个字节地址的偏移量,必须整除成员的对齐值(8)
1、 若成员大小 < 对齐数(8) 对齐值为成员大小
2、 若成员大小 >= 对齐数(8) 对齐值为对齐数(8)
整个结构体变量大小为最大值对齐数的整数倍
六、文件操作
七、qsort快排用法
八、指针的用法
整形指针、字符指针、数组指针、函数指针、结构体指针
1、指针数组和数组指针的区别
(1)数组指针
- 数组指针是是指向数组的指针,其本质是指针
- 一般用于二维数组或存放指针,也可以放一维数组
- 原型为 *void (p)[size_t]
(2)指针数组
- 指针数组是一个存放指针的数组
- 原型为 *void * 数组名[size_t], void arr[size_t]
- 理解为指针放在数组中,其本质还是数组
2、函数指针
函数指针
- 原型:类型 (*p)(参数类型)
函数指针数组
总结
1、scanf("%*d%d", &a);
%*d ——是忽略这个输入值
eg:提取身份证的出生日期
scanf("%*6d%4d%2d%2d%*4d", &a, &b, &c);