[問題] C 資料型態位元組的問題

看板C_and_CPP (C/C++)作者 (Liou)時間11年前 (2015/05/01 23:18), 11年前編輯推噓1(103)
留言4則, 1人參與, 最新討論串1/1
看書看到一半突然發現有這個地方怪怪的,簡單的說 就是利用sizeof()來看位元組的大小看不懂....。 程式碼如下: #include <stdio.h> #include <stdlib.h> int main(void) { struct data { char name[10]; int math; }student={"Bird",98}; printf("sizeof(student)=%d\n",sizeof(student)); system("pause"); return 0; } 此時印出的是16 把char name[10]改成char name[11]印出的還是16 改成[20]是24 改成[50]是56 改成[51]是56..... 有先了解一下 int是4個位元組,char是1個位元組 請問造成這些原因是什麼呢?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.5.212 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430493488.A.225.html ※ 編輯: elohacp4 (111.251.5.212), 05/01/2015 23:19:18

05/01 23:20, , 1F
對齊問題, 就是編譯器將東西的位址對齊到 4 的倍數
05/01 23:20, 1F

05/01 23:21, , 2F
對 32 位元的機器有對齊 4 位元組的東西存取比沒對齊的快
05/01 23:21, 2F

05/01 23:21, , 3F
這裡被對齊的是結構裡的 int 變數, 為此在前面的 char 陣列
05/01 23:21, 3F

05/01 23:22, , 4F
之後補了零至數個位元組到 4 的倍數,然後才是這個 int 變數
05/01 23:22, 4F
謝謝您,我懂了^_^ ※ 編輯: elohacp4 (111.251.5.212), 05/01/2015 23:27:50
文章代碼(AID): #1LGvam8b (C_and_CPP)
文章代碼(AID): #1LGvam8b (C_and_CPP)