C語言_筆記

1,結(jié)構(gòu)體:

占多少內(nèi)存?
如下圖a,b,c三個變量。假如a占4個字節(jié),b占1個字節(jié),c占4個字節(jié)。那么struct wjb這個結(jié)構(gòu)體占多少內(nèi)存呢?
a是首地址,偏移量是0,b的偏移量是a,也就是4個字節(jié),c的偏移量是a+b,也就是5個字節(jié)。
結(jié)構(gòu)體的內(nèi)存占用計算方式是:最后地址的字節(jié)數(shù)+偏移量+填充字節(jié)(如果a+b的偏移量不是C的整數(shù)倍,將自動填充成c的整數(shù)倍,注意:每個變量的偏移量必須是自身所占字節(jié)的整數(shù)倍。)。最后計算出來結(jié)果是:4+1+(3)+4=12。

注意:如果計算出來的結(jié)果不是這個結(jié)構(gòu)體內(nèi)最寬的數(shù)據(jù)類型(這里是int)的字節(jié)數(shù)的整數(shù)倍,那么這個最寬的數(shù)據(jù)類型將自動填充字節(jié)。
#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,公用體:

公用體和結(jié)構(gòu)體的內(nèi)存占用不一樣,公用體內(nèi)的變量用的是同一個地址,所占內(nèi)存是公用體內(nèi)最寬的那個變量的字節(jié)數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容