• [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可以换位置)
  • 相关阅读:
    rabbitmq线上服务器与项目结合的问题总结
    关于RabbitMQ Queue Argument的简介
    rabbitmq代码配置
    python基础篇17-虚环境
    Java-实体与集合转换
    Java-精确计算工具类
    Java-汉字繁体拼音转换
    Java-集合条件筛选
    Java-发邮件
    Java-MD5
  • 原文地址:https://www.cnblogs.com/lidongxu/p/5641793.html
Copyright © 2020-2023  润新知