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<stdio.h>
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,公用体:
公用体和结构体的内存占用不一样,公用体内的变量用的是同一个地址,所占内存是公用体内最宽的那个变量的字节数。
网友评论