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了。

慕無忌1623718
TA貢獻1744條經驗 獲得超4個贊
指針都是4個字節,
如果char ss[100]="0123456789",sizeof(ss)還是4,因為數組就是指針
字符串長度用strlen(char *)函數。

Qyouu
TA貢獻1786條經驗 獲得超11個贊
char* ss = "0123456789";
說明ss是一個字符類型指針,是4個字節
指針只與機器有關. 如果你的機器是16位尋址的, 那指針就是16位的, 如果是32位尋址的, 指針也是32位的,即4字節
后來那個sizeof(teacher)不是一個指針,它的大小與你的結構體大小有關。比如一個整型4個字節,浮點數6個字節,字符型1個字節,這是因編譯器而異的。注意,同位體同算一段,加起來就行
- 3 回答
- 0 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消