一、指针
1.变量类型和指针类型不一致时,不可将变量地址赋值给指针,否则可能发生访问越界或数据溢出等现象。
2.数组元素在内存中是连续存放的。
3.函数指针可以不需要解引用操作符(*),直接通过指针调用此函数。
4. %c前加空格,可处理垃圾字符;
二、字符串
1.%-md:输出格式为整形,长度为m(输出最小长度),-表示左对齐;
2.%s用于打印字符串;%c用于单个字符输出。
3.使用字符数组来保存的字符串是保存栈里的,保存栈里面东西是可读可写,所以可以修改字符串中的的字符;使用字符指针来保存字符串,它保存的是字符串常量地址,常量区是只读的,所以我们不可以修改字符串中的字符
4.十六进制的不同输出方式,%x ,%X ,%#x ,%#X ;
5.%d 输出的是 int , %ld 输出的是 long , %lld 输出的是 long long;
三、关键字
1.关键字const用来定义常量,const修饰的局部变量(存储在栈空间)不可以通过变量名修改但是可以通过指针修改,const修饰的全局变量(存储在常量区)既不可以通过变量名修改也不可以通过指针修改。
2.用register关键字修饰变量,就是编译程序时希望把该变量放到寄存器中,这样可以提高对该变量的访问速度。由前言可知,CPU访问寄存器的速度是高于访问内存的速度。当一个变量会被频繁调用时,可以用register去修饰变量,将变量保存在寄存器中,可以提升访问变量的速度。
四、结构体
1.结构类型定义在函数内部的作用域与局部变量的作用域是相同的(从定义的那一行开始, 直到遇到return或者大括号结束为止);结构类型定义在函数外部的作用域与全局变量的作用域是相同的(从定义的那一行开始,直到本文件结束为止)。
2.普通结构体使用“.”访问成员变量;结构体指针变量使用“->”访问成员变量。
3.结构体数组和普通数组并无太大差异, 只不过是数组中的元素都是结构体而已。
4.结构体大小计算规则:
(1)平台(操作系统)(2)计算机软件平台(vs,vc6.0,gcc),32/64
(3)对齐参数(操作系统对齐参数+c语言中数据类型的对齐参数)
eg:int
32位平台:最大和4字节对齐(linux)
32位平台:最大和8字节对齐(vs2022)
64位平台:最大和8字节对齐
(4)结构体首先为每个成员开辟空间,同时对齐到该变量的整数倍。当结构体空间开辟结束后,和结构体中最大的成员对齐。
5.共用体所占空间的大小是其最大成员的大小,共用体内部所有成员共享同一块内存空间(所有成员的首地址相同)
6.枚举型
用途:通常取代大面积宏的使用。
优点:(1)不需要定义太多宏 (2)解决宏常量冲突的问题
五、函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
atoi函数是将字符串转换成整数。
int atoi (const char * str);
该函数的返回值为int类型的整数,转换后的值不可超出int可表示的范围。
六、链表
1.哨兵节点,也是头结点。