• C语言——问题总结


    1、指针数组与数组指针的区别

    指针数组        int *p[5];         每一个元素就是一个指针,多用于二级指针

    数组指针        int (*p)[5];      每个元素地址表示就是一个一维数组的首地址。多用于二维数组

    2、结构体与共用体的大小计算      

    结构体总大小 % 最大的位置偏移 == 0,如果不为0则补齐,struct内存对齐与取消内存对齐: 

    struct A{
        int a;    //4     0  % 4 = 0
        char b;   //1     4  % 1 =0   
        double c; //8     5  % 8 =5  +3  4+1+8+3 = 16
        short d;  //2     16 % 2 =0  =18 
                          18 % 4 =2  +2  = 20内存对齐 
    };                 //结构体的总大小 % 最大的位置偏移 == 0 

    structB{
        int a;       //4
        char b;      //1
        double c;    //8
        short d;     //2  
    }__attribute__((__packed__));  //取消内存对齐 = 15

    共用体则是        最大的成员对应的内存

    3、数组与结构体的区别

    结构体类型的变量是由多个单一数据类型的变量组合在一起的,在使用的时候, 可以对结构体内部的单一数据类型变量单独来访问。

    数组的成员全部是同类型,而结构体变量的成员可以是不同数据类型

    4、共用体与结构体的区别

    1、结构体使用struct关键字来定义,共用体使用union关键字来定义
    2、结构体的每个成员都有单独的内存空间,而共用体的所有成员共用同一块内存(最大的成员对应的内存)
    3、共用体变量与结构体变量访问成员的方法是一样

    5、typedef和#define的区别

    1、 #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

    2、typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

    6、宏定义与枚举的区别

            枚举是一中类型,可以用来定义变量,可以包含多个枚举成员,而宏是替换,没有类型,也没有多个成员。

    强调:enum;  

        1、枚举成员的每一个成员都是整数
        2、分隔符:为逗号‘,’
        3、可以直接赋值:struct和union都不行。
        4、枚举的成员直接访问

  • 相关阅读:
    golang常用包
    Jmeter工具二次开发
    Ubuntu衍生发行版使用体验(lubuntu、xubuntu、kubuntu)
    你应该知道的数仓安全:都是同名Schema惹的祸
    C语言——联合与枚举
    简单工厂模式、工厂模式、抽象工厂模式(含C++代码)
    Java解析MDB(上)-纯JDBC解析非空间数据
    C#-异步方法关键字async和await
    Remix 2.0 正式发布,现代化全栈Web框架!
    SLAM面试笔记(8) — 计算机视觉面试题
  • 原文地址:https://blog.csdn.net/m0_51274562/article/details/127170292