看板 C_and_CPP 關於我們 聯絡資訊
#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
joefaq:double是8byte int4byte char雖然只有1byte但是實作是4byte 02/24 18:16
purpose:一個 double 是 8 bytes 啊 02/24 18:16
我一直以為struct存的是記憶體位置 類似pointer那樣 所以不論你宣告的變數大小 都是存成4byte 那我懂了 還有4byte為一個單位 不可能出現類似19byte這樣 ※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:19)
loveme00835:sizeof(mydata) >= 2*sizeof(double)+sizeof(int)+ 02/24 18:18
loveme00835:sizeof(char) 02/24 18:18
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:22)
purpose:去翻一下其他書吧 02/24 18:21
我想再問 如果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)
loveme00835:不會有人知道它是多少, 要等 compiler 告訴你 02/24 18:27
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:29)
loveme00835:你看我上面的式子, 不是等於, 不能這樣算, 管他幾byte 02/24 18:29
loveme00835:你寫死就是不對 02/24 18:30
※ 編輯: XYX16888 來自: 140.112.4.181 (02/24 18:34)
loveme00835:大小會依照你的系統跟編譯器編譯的模式有關, 還有不要 02/24 18:39
loveme00835:相信書上都是對的 02/24 18:39
loveme00835:改錯: 依照→和, 很多人看書都直接忽略文字敘述而直接 02/24 18:40
loveme00835:跳去看程式碼, 大部分的原因是有東西可以抄, 但是也因 02/24 18:41
loveme00835:此容易被寫不好的 code誤導, 重要觀念也學不到, 好好 02/24 18:41
loveme00835:看完教科書吧... 02/24 18:41
legnaleurc:很多時候這種東西是 compiler 說了算 ... 02/24 19:03
werdna:你的是64位元的系統嗎? 02/24 19:17
winest:用VC要確保大小的話在前面加#pragma pack( push , 1 ) 02/24 19:52