[C]语法, 知识点总结(二. 结构体, 类别名, static, const)
结构体
定义:
struct Student{ // 定义结构体Student, stu是创建的对象 char a[17]; // 结构体里面可以有多种不同类型的变量 int b; char c; double d; }stu; printf("%ld", sizeof(stu)); // 打印的是40
分析:
假设从地址0开始给结构体空间
分配char a[17];(17字节) -> 现在偏移量是17
接下来存int(4字节), 根据对齐方式, 当前偏移量必须是4的倍数
需要补全3个字节达到偏移量20 (这3个字节什么也不存)
分配int b; 偏移量24
分配char c;(1字节), 偏移量24是1的倍数, 所以继续分配, 偏移量25
分配double d;(8字节), 根据要求偏移量必须是8的倍数, 25需要补7
补全7个字节, 什么也不存, 然后加上这8字节共40个字节
预编译, 编译, 运行
- #######define, #import, #include, #warning, #prama mark, #error, #if, #else, #endif 等等, 只要是用#开头的, 都是预编译, Xcode一直在进行预编译.
- Command + B 编译, 是把OC代码转换成C代码等资源.
- 运行, 就是程序在机器中, 跑起来
- #######define N 3 (把项目中所有N换成3)
类别名
typedef int* apple1; // 给int *起个别的名字叫 apple1
apple1 p = NULL, q = NULL; (apple1 还是int *)
static
static int a = 10; // 在编译时已经执行完了, 运行的时候不再执行, 确保a在每次运行的过程当中只初始化一次
(可以设置断点, 运行时候不会停在它身上-> 代表运行时不执行这行代码)
使用:
void fun() { static int a = 0; // 下次走的时候,不想让a释放 a++; }
const
const 声明的东西是 readonly(只读) 存放在常量区 (节省栈内存)
- const int *a *a = 5 内容不能变 指针a可以指向别的
- int * const a 指针不可变, 内容可以变
- int const * const a 都不可以变 (const和int可以换位置)
努力做一名,让再菜的菜鸟都能看明白,学明白的博客的制造者