當我在一個結構中定義一個字符類型時,它似乎需要多於1個字節;實際上它似乎需要4個字節。在一個結構中定義了多少個字節?
下面是我的程序:
#include <stdio.h>
int main(void)
{
struct book{
char name;
float price;
int pages;
};
struct book b1={'B',130.00,550};
printf("\nAddress of structure:%u",&b1);
printf("\nAddress of character name:%u",&b1.name);
printf("\nAddress of float price:%u",&b1.price);
printf("\nAddress of integer pages:%u",&b1.pages);
printf("\n\n");
return 0;
}
當我運行上面的程序,我得到下面的輸出:
Address of structure:557762432
Address of character name:557762432
Address of float price:557762436
Address of integer pages:557762440
爲什麼,我看到的地址之間的4個字節的區別變量「名稱」和變量「價格」?
運行此程序的系統是運行Fedora-14的x86_64位版本。
編譯器打包結構以便數據成員正確對齊,並且程序可以快速運行。由於對齊不準確,某些芯片(ARM)只會失效,其他(x86)則運行速度較慢。 – Lalaland 2012-01-18 06:20:09
在64位機內存字創建的64位,因爲它是32位的32位地址 x86_64 – 2012-01-18 06:21:56
@RashmiKantShrivastwa感謝您的答覆,將閱讀更多關於填充 – mrashok 2012-01-18 06:37:34