0
我寫了一個簡單的結構程序。下面是我寫打印的結構 -爲字符編譯後得到錯誤的結構體大小數據類型
#include<stdio.h>
main()
{
struct book
{char name[10];
int pages;
float price;
}b1={"Blue",500,200.00};
printf("The Address Of Name Is = %d ",&b1.name);
printf("\nThe Address Of Pages Is = %d",&b1.pages);
printf("\nThe Address Of Price Is = %d",&b1.price);
}
內聲明的變量的大小程序的代碼現在,當我編譯程序並運行它的問題出現了。我將CHARACTER數組的大小打印爲12個字節而不是10個字節。這裏是輸出 -
[email protected]:~$ ./a.out
The Address Of Name Is = 1264893904
The Address Of Pages Is = 1264893916
The Address Of Price Is = 1264893920
有人可以請解釋爲什麼會發生這種情況嗎?另請注意,我正在Linux環境中運行。
我知道由於編譯器完成了這個填充,程序運行得更快。現在一個問題是,如果人們能夠檢測到不同架構下的地址必須在多少個地址中,那麼該如何檢測?就像在x86上一樣,它必須有所不同,而在一些不同的架構上,它必須是其他的數字。 –
在C++ 11中,您可以使用http://en.cppreference.com/w/cpp/language/alignof – Salgar