日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

结构体成员的存储

發(fā)布時間:2025/6/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结构体成员的存储 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? 剛開始學(xué)C語言只知道怎么引用結(jié)構(gòu)體成員變量,但卻很少關(guān)注結(jié)構(gòu)體成員的存儲,存儲涉及到了內(nèi)存對齊相關(guān)的知識,要能很準(zhǔn)確的引用結(jié)構(gòu)體成員變量也需要學(xué)習(xí)一下它的存儲。

?

#include<stdio.h>typedef struct node {int a;char str[2];char c;char str1[2]; }Node,*pNode;int main() {Node nodeTest={100,"b",'m',"1"};pNode p=&nodeTest;printf("%d\n",p->a);printf("%s\n",&(p->a)+1);printf("%s\n",p->str);printf("%s\n",&(p->a)+2);printf("%d\n",sizeof(nodeTest));return 0; }

打印:100

?

? ? ? ? ? ? ?b

?

? ? ? ? ? ? 12 ? ? ? ? ??

通過打印結(jié)果可以看出,結(jié)構(gòu)體里面的成員變量是存儲在相鄰的內(nèi)存中。按內(nèi)存對齊原則,其中成員a占4個字節(jié),成員str和c一起共占4個字節(jié),str1成員也占4個字節(jié),所以一起占12個字節(jié),與sizeof()函數(shù)的結(jié)果剛好一致。但是上述打印結(jié)果又一個問題,printf("%s\n",&(p->a)+2)結(jié)果為空,這是什么原因呢?不過首先說一下&(p->a)+2到底移動了幾個位。其實它是移動了8個位。成員a占4個字節(jié),則&(p->a)沒加1是前進4個字節(jié)。那么按照內(nèi)存對齊原則,則應(yīng)該剛好打印成員str1的值啊,什么原因呢?繼續(xù)看

?

#include<stdio.h>typedef struct node {int a;char str[2];char c;char str1[4]; }Node,*pNode;int main() {Node nodeTest={100,"b",'m',"123"};pNode p=&nodeTest;printf("%s\n",&(p->a)+2);return 0; }

打印:23

?

從打印結(jié)果可以看出,&(p->a)+2已經(jīng)指向str1中'2'對應(yīng)的地址。指針在偏移的時候沒有考慮內(nèi)存對齊兒空缺的那一個字節(jié),所以最后導(dǎo)致偏移多了一位,這樣就造成了上面的打印結(jié)果為空。

?

在工作中,我們通常要在別人的代碼中增加新的功能,在增加功能的過程中可能要向結(jié)構(gòu)體中增加新的成員變量。由于內(nèi)存存儲是連續(xù)的,所以不能從結(jié)構(gòu)體中間增加變量,因為這樣會造成賦值混亂,出現(xiàn)內(nèi)存溢出。正確的做法是添加新成員到結(jié)構(gòu)體的尾部。

#include<stdio.h>typedef struct node {int a;char str[2];//char str2[2];在這里添加會造成內(nèi)存溢出char c;char str1[4];char str2[2];//在這里添加是正確的 }Node,*pNode;int main() {Node nodeTest={100,"b",'m',"123"};pNode p=&nodeTest;printf("%d\n",p->a);printf("%s\n",p->str);printf("%c\n",p->c);printf("%s\n",p->str1);return 0; }

打印:100

?

? ? ? ? ? ? b

? ? ? ? ? ? m

? ? ? ? ? ?123

如果打印str2,其結(jié)果也是空


?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的结构体成员的存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。