日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中有关void,sizeof,结构体的一些问题

發(fā)布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中有关void,sizeof,结构体的一些问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
void[1]:
void是C語言中的空類型,void的用途有二。
1、對函數(shù)返回的限定;
如果函數(shù)沒有返回值,則默認(rèn)返回整數(shù)類型,而不是void類型。c++有很嚴(yán)格的類型,不允許函數(shù)不加類型聲明,而編譯器則不這么認(rèn)為檢查這一點在VC6.0中可以驗證。所以在編寫代碼的時候,每個函數(shù)都應(yīng)該加上返回類型。 2、對函數(shù)參數(shù)的限定;
? ? ? 在c++中,函數(shù)參數(shù)為void意味著不接受參數(shù),但是在c語言中可以給無參數(shù)的函數(shù)傳遞任意類型的參數(shù),這點在turbo c中可以驗證。

指針的大小和機器的位數(shù)有關(guān),在32位機器上任何類型指針的大小都是4字節(jié),在64位機器上為8。所以指針大小和類型無關(guān)。 void*就是空類型指針,所謂空類型指針就是通用指針類型。它有以下特點。 1、按照ASC碼標(biāo)準(zhǔn)void指針不能做算術(shù)操作,因為不確定其指向數(shù)據(jù)類型大小;
2、c++允許將任何類型的指針賦給void*,但是不允許void指針賦值給其它類型。必須顯示的強制轉(zhuǎn)換。

其它類型指針相互之間是否也可以強制裝換?
? ?強制轉(zhuǎn)換后編譯能通過,大部分情況下運行也是沒有問題的,但是根據(jù)參考文獻[4]的說法是容易出問題的,因為某些CPU對某些數(shù)據(jù)類型有對其限制,這樣在做指針強制轉(zhuǎn)換的時候就容易出現(xiàn)問題。
? ?其實,其它類型指針之間的轉(zhuǎn)換完全可以通過使用void*類型來避免。

sizeof[2]:

前面說在同一臺機器上指針大小是固定的,通過sizeof測試int*,char*,bool*,double*都出結(jié)果都是4(32位機器測試)。
今天在程序中memset一個T*類型的指針,發(fā)現(xiàn)沒有初始化成功,原來在memset的第三個參數(shù)中填的是sizeof(T*類型的指針)。特此總結(jié)了一下sizeof的一些問題。
1、char* s="0123456789";
??????sizeof(s)=4,s是一個指針。
? ? ? sizeof(*s)=1,*s是第一個元素。
? ? ? strlen(s)=10,s是字符串首地址。
2、char s[]="0123456789";
? ? ? sizeof(s)=11,s是字符串?dāng)?shù)組,包括'\0'。
? ? ? sizeof(*s)=1,*s是第一個元素。
? ? ? strlen(s)=10,s是字符串首地址。
3、char s[20]="0123456789";
? ? ? sizeof(s)=20,s是在內(nèi)存中靜態(tài)分配的大小。
? ? ? sizeof(*s)=1,*s是第一個元素。
? ? ? strlen(s)=10,s是字符串首地址。

結(jié)構(gòu)體[3]:

結(jié)構(gòu)體在字節(jié)對齊的時候有三個原則,有了這三個原則就很容易的可以計算出任意一個結(jié)構(gòu)體的sizeof大小了。
1、結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型的成員大小所整除;
2、結(jié)構(gòu)體每個成員相對于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會在成員之間加上填充字節(jié)(internal adding);
3、結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會在最末一個成員之后加上填充字節(jié)(trailing padding)。

總結(jié)

以上是生活随笔為你收集整理的c语言中有关void,sizeof,结构体的一些问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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