亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下在VC6.0運行后出來是40 ,不應該是10+20+1+4+4=39嗎?求指教

如下在VC6.0運行后出來是40 ,不應該是10+20+1+4+4=39嗎?求指教

C++
MMTTMM 2022-05-12 10:11:36
char* ss = "0123456789";sizeof(ss) 結果 4 為啥??struct example{char id[10];char name[20];char sex;int age;union{float salary;float score;};}teacher,student;void main(){example teacher={"000788","WangWei",'M',30,5000};example student={"000518","ZhangYu",'F',20,95};cout<<teacher.id<<" "<<teacher.name<<" "<<teacher.sex<<" "<<teacher.age<<" "<<teacher.salary<<endl;cout<<student.id<<" "<<student.name<<" "<<student.sex<<" "<<student.age<<" "<<student.score<<endl;cout<<"sizeofstudent="<<sizeof(student)<<endl; //40cout<<"sizeofteacher="<<sizeof(teacher)<<endl; //40 試了 運行出來是40 怎么得的??第一個問題明白了 指針是4字節 后面這一小段程序(跟頭一個問題沒關系) 
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

指針4字節這個你知道了,如果是聲名成字符串數組sizeof可以得到字符串長度。
你算的倒是沒錯,是39。不過VC的sizeof運算符在計算class、struct和union類型的時候,會把對齊用的填充字節也算進去。默認是按4字節(word)對齊,所以其結果一定可以被4整除,最小的符合這個要求的尺寸就是40,實際上就是有一個字節用作填充了。
不過可以把對齊設置成按1字節,這樣就能得到準確的尺寸了,在項目屬性頁里面的配置屬性 -> c/c++ -> 命令行配置中,增加附加選項/Zp1就可以的到正確的39了。

查看完整回答
反對 回復 2022-05-16
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

指針都是4個字節,
如果char ss[100]="0123456789",sizeof(ss)還是4,因為數組就是指針
字符串長度用strlen(char *)函數。

查看完整回答
反對 回復 2022-05-16
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

char* ss = "0123456789";
說明ss是一個字符類型指針,是4個字節
指針只與機器有關. 如果你的機器是16位尋址的, 那指針就是16位的, 如果是32位尋址的, 指針也是32位的,即4字節
后來那個sizeof(teacher)不是一個指針,它的大小與你的結構體大小有關。比如一個整型4個字節,浮點數6個字節,字符型1個字節,這是因編譯器而異的。注意,同位體同算一段,加起來就行

查看完整回答
反對 回復 2022-05-16
  • 3 回答
  • 0 關注
  • 135 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號