C语言_笔记

1,结构体:

占多少内存?
如下图a,b,c三个变量。假如a占4个字节,b占1个字节,c占4个字节。那么struct wjb这个结构体占多少内存呢?
a是首地址,偏移量是0,b的偏移量是a,也就是4个字节,c的偏移量是a+b,也就是5个字节。
结构体的内存占用计算方式是:最后地址的字节数+偏移量+填充字节(如果a+b的偏移量不是C的整数倍,将自动填充成c的整数倍,注意:每个变量的偏移量必须是自身所占字节的整数倍。)。最后计算出来结果是:4+1+(3)+4=12。

注意:如果计算出来的结果不是这个结构体内最宽的数据类型(这里是int)的字节数的整数倍,那么这个最宽的数据类型将自动填充字节。
#include
struct wjb{ 
  int a;
  char b;
  int c;



 //char name[20];
 //int price;
};
int main(){
 struct wjb wjb_1 = {"wjb_name",1000};
 printf("%s\n,%d\n",wjb_1.name,wjb_1.price);
 struct wjb * w;
 w = &wjb_1;
 printf("name=%s\n",w->name);
 struct wjb wjb_2[2]={{"aaa",100},{"bbb",200}};
 struct wjb * p;
 p=wjb_2;
 printf("%s\n",p->name);
 p++;
 printf("%s\n",p->name);
return 0;
}

2,公用体:

公用体和结构体的内存占用不一样,公用体内的变量用的是同一个地址,所占内存是公用体内最宽的那个变量的字节数。

你可能感兴趣的:(C语言_笔记)