C语言之结构体、联合体

结构体spa

  1,结构体即为多个基本数据类型组合而成的数据类型。结构体本质上同int等同样同为数据类型,能够定义变量,内部成员不能直接赋值。code

struct Man
{
    int age = 30;
    int score = 80;
};

    上面是错误的。正确写法以下:blog

struct Man
{
    int age; //这样就行了
    int score;
};

int main()
{
   struct Man man1 = {30,80};
}

  2,结构体常同typedef类型重命名一同使用,以下:内存

typedef struct Man
{
    int age; //这样就行了
    int score;
}MAN;

int main()
{
   MAN man1 = {30,80};
}

  3,结构体内存对齐io

typedef struct Man
{
    char age; //这样就行了
    int score;
}MAN;

int main()
{
    printf("%d",sizeof(MAN));
}

  以上代码输出的值为8,而不是直观意义上的5,这是由于结构体中的成员是对齐的,这里按4字节对齐。当CPU访问正确对齐的数据时,它的运行效率最高,数据对齐不是内存结构的一部分,而是CPU结构的一部分。class

  结构体成员对齐是按照类型大小对齐的,而结构体按照长度最大的类型对齐。如成员中char按1字节对齐,short按2字节对齐,int按照4字节对齐等,这里的结构体成员最长的是int为4字节,因此这个结构体按照4字节对齐。效率

   

联合体变量

   1,联合体本质上为不一样数据类型共享存储空间,此空间要大到足够容纳最"宽"的成员。它的全部成员相对于基地址的偏移量都为0。数据类型

union U
{
    char s[9];
    int n;
    double d;
};

   2,联合体一般与结构体共用,经过不一样方式给变量赋值。nio

union REG
{
   struct
   {
      unsigned short a;
      unsigned short b;   
   } H; 
  unsigned
int R;
} Reg;

  上面能够经过Reg.R给变量赋值,也能够分别经过Reg.H.a、Reg.H.b分别赋值,要注意字节序。

相关文章
相关标签/搜索