免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
結(jié)構(gòu)體定義使用及指針長度問題

https://blog.csdn.net/zllbuaa/article/details/32335277

1.結(jié)構(gòu)體定義問題

typedef struct{

int a;

char b;

int b;

}test;

然后再程序中定義一個(gè)結(jié)構(gòu)體變量:struct test iseq;

引用成員變量:iseq.a=1;

編譯程序時(shí)候會(huì)出現(xiàn):dereferencing pointer to incomplete type錯(cuò)誤

解決方法:在結(jié)構(gòu)體定義的時(shí)候struct 后面一定要先有一個(gè)名字(不知道是否正確,但是實(shí)驗(yàn)結(jié)果是對的),改為如下:

typedef struct _test{

int a;

char b;

int b;

}test;

  或者直接這樣定義:

struct test{

int a;

char b;

int b;

};

2.關(guān)于結(jié)構(gòu)體指針的使用

結(jié)構(gòu)體指針的使用一定要先用一個(gè)已知結(jié)構(gòu)體賦值或者先非配內(nèi)存。

例如定義1中的結(jié)構(gòu)體,程序中定義一下

struct test   iseq;

struct test   *tmp;

iseq.a=1;

tmp->a=1;

編譯程序時(shí)通過,但是運(yùn)行程序時(shí)會(huì)出現(xiàn)段錯(cuò)誤:segmentation fault;

解決方法:

(1)在使用tmp之前先賦值。

例如:tmp=&iseq;

(2)在使用前先分配內(nèi)存;

tmp=(struct test *)malloc(sizeof(struct test));

原因:結(jié)構(gòu)體指針在使用之前沒有分配內(nèi)存。

3.關(guān)于指針長度問題

以下例子:

char  proname[100];

char  *prefix="host";

struct test  iseq;

struct test  *tmp;

tmp=(struct test *)malloc(sizeof(struct test));

試想一下式子的值:

sizeof(proname);

sizeof(prefix)

sizeof (struct test);

sizeof(iseq);

sizeof(tmp);

sizeof(*tmp);

sizeof(*proname);

sizeof(*prefix);

strlen (prefix);

以上各式子的值分別為(64為機(jī)子,gcc編譯器)

100,8,12,12,8,12,1,1,4

通過以上實(shí)驗(yàn)可以知道:

指針的長度代表指針自己,例如64機(jī)子所有指針都是8bytes,sizeof(iseq)長度為12是因?yàn)橛袃?nèi)存對齊的原因,將char 對齊成四個(gè)字節(jié)。

想得到指針指向的內(nèi)存大小使用strlen函數(shù)。

sizeof(proname)為100,這也是指針和數(shù)組的區(qū)別之一。簡單來說就是數(shù)組對應(yīng)一塊內(nèi)存,地址和容量確定,而指針指向一塊內(nèi)存,大小可以變。

4.指針和數(shù)組的詳細(xì)區(qū)別

(1) 兩者在含義上的區(qū)別。 
數(shù)組對應(yīng)著一塊內(nèi)存區(qū)域,而指針是指向一塊內(nèi)存區(qū)域。其地址和容量在生命期里不會(huì)改變,只有數(shù)組的內(nèi)容可以改變;而指針卻不同,它指向的內(nèi)存區(qū)域的大小可以隨時(shí)改變,而且當(dāng)指針指向常量字符串時(shí),它的內(nèi)容是不可以被修改的,否則在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。 

(2)計(jì)算內(nèi)存容量的區(qū)別

用運(yùn)算符sizeof可以計(jì)算出數(shù)組的容量(字節(jié)數(shù)),而用sizeof卻無法計(jì)算指針?biāo)竷?nèi)存的容量,用sizeof(p)得到的結(jié)果永遠(yuǎn)是 4或者8(具體根據(jù)機(jī)器有關(guān))。在進(jìn)行參數(shù)傳遞時(shí),數(shù)組會(huì) 自動(dòng) 退化為同類型的指針。



本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言學(xué)習(xí)篇(15)-----函數(shù)傳參詳解
結(jié)構(gòu)體struct和聯(lián)合體union最全講解
柔性數(shù)組在實(shí)際項(xiàng)目中的應(yīng)用?
C語言面試題
數(shù)組指針和數(shù)組引用做參數(shù)的區(qū)別(是否能夠限定數(shù)組大小、數(shù)組降價(jià))
char *p[10] 和char (*p1)[10]
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服