[問題] struct大小的問題

看板C_and_CPP (C/C++)作者 (XYX)時間15年前 (2011/02/24 18:03), 編輯推噓7(7012)
留言19則, 7人參與, 最新討論串1/1
#include <iostream> #include <cstring> #include <cstdlib> using namespace std; struct mydata { char name; int math; double height, weight; } student; int main(void) { cout << sizeof(student); return 0; } 為什麼跑出來是24? 不是一個變數是4byte嗎? 應該是16byte才是阿?@@ 還是跟compiler有關係? 我是用mac Xcode -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.181

02/24 18:16, , 1F
double是8byte int4byte char雖然只有1byte但是實作是4byte
02/24 18:16, 1F

02/24 18:16, , 2F
一個 double 是 8 bytes 啊
02/24 18:16, 2F
我一直以為struct存的是記憶體位置 類似pointer那樣 所以不論你宣告的變數大小 都是存成4byte 那我懂了 還有4byte為一個單位 不可能出現類似19byte這樣 ※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:19)

02/24 18:18, , 3F
sizeof(mydata) >= 2*sizeof(double)+sizeof(int)+
02/24 18:18, 3F

02/24 18:18, , 4F
sizeof(char)
02/24 18:18, 4F
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:22)

02/24 18:21, , 5F
去翻一下其他書吧
02/24 18:21, 5F
我想再問 如果struct內宣告 string name; 那這樣是多大? 因為看書上面是說字串欄位只儲存字串實際存放的位置 ※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:25) struct mydata { string name; int age; }student; 我宣告這樣 sizeof(student); 出來是16 書上也是這樣宣告 結果他印出是8 為什麼我的是16?@@ 但是若只宣告 struct mydata { string name; } student; sizeof(student); 出來是8 代表int age 佔了8byte?有點怪!@@ ※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:28)

02/24 18:27, , 6F
不會有人知道它是多少, 要等 compiler 告訴你
02/24 18:27, 6F
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:29)

02/24 18:29, , 7F
你看我上面的式子, 不是等於, 不能這樣算, 管他幾byte
02/24 18:29, 7F

02/24 18:30, , 8F
你寫死就是不對
02/24 18:30, 8F
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:34)

02/24 18:39, , 9F
大小會依照你的系統跟編譯器編譯的模式有關, 還有不要
02/24 18:39, 9F

02/24 18:39, , 10F
相信書上都是對的
02/24 18:39, 10F

02/24 18:40, , 11F
改錯: 依照→和, 很多人看書都直接忽略文字敘述而直接
02/24 18:40, 11F

02/24 18:41, , 12F
跳去看程式碼, 大部分的原因是有東西可以抄, 但是也因
02/24 18:41, 12F

02/24 18:41, , 13F
此容易被寫不好的 code誤導, 重要觀念也學不到, 好好
02/24 18:41, 13F

02/24 18:41, , 14F
看完教科書吧...
02/24 18:41, 14F

02/24 19:03, , 16F
很多時候這種東西是 compiler 說了算 ...
02/24 19:03, 16F

02/24 19:17, , 17F
你的是64位元的系統嗎?
02/24 19:17, 17F

02/24 19:52, , 18F
用VC要確保大小的話在前面加#pragma pack( push , 1 )
02/24 19:52, 18F

02/26 05:42, , 19F
文章代碼(AID): #1DPYq0Th (C_and_CPP)
文章代碼(AID): #1DPYq0Th (C_and_CPP)