[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可以换位置)
原文地址:https://www.cnblogs.com/lidongxu/p/5641793.html