壹個結構的成員可以包含其他結構或者指向自己結構類型的指針,通常這個指針的應用是實現壹些更高級的數據結構比如鏈表、樹。//此結構的聲明包含其他結構struct?復雜{char?string[100];struct?簡單?a;};?//此結構的聲明包含指針結構?節點{char?string[100];struct?節點?* next _ node};如果兩個結構相互包含,其中壹個需要聲明不完整,如下:struct?b;//結構B的聲明不完整?//結構A包含指向結構B的指針結構?壹個{struct?b?*合作夥伴;//其他?成員;};?//結構B包含指向結構A的指針,A聲明後,B也聲明struct?B{struct?答?*合作夥伴;//其他?成員;};結構和其他類型的基本數據類型是壹樣的,比如int類型和char類型,除了結構可以做成妳想要的數據類型。以便於將來使用。
在實際工程中,有大量的結構。開發人員經常使用結構來封裝壹些屬性,以形成新的類型。由於C語言的內部程序相對簡單,研究人員為了簡化運算,通常會使用結構來創建新的“屬性”。
結構的作用不簡單,主要作用是封裝。包裝的好處是可以重復使用。讓用戶不用管這是什麽,按照定義來用就行了。結構的大小不是簡單的結構元素之和,因為我們的主流電腦都是使用32位CPU,對於這種類型的CPU,取四個字節比壹個字節更高效,更方便。所以如果結構中每個成員的第壹個地址是4的整數倍,那麽取數據元素的效率會相對更高,這就是內存對齊的由來。每個特定平臺上的編譯器都有自己默認的“對齊系數”(也稱為對齊模數)。程序員可以通過預編譯命令#pragma pack(n)來改變這個系數,n=1,2,4,8,16,其中n是妳要指定的“對齊系數”。
規則:
1,數據成員對齊規則:structure(或union)的數據成員,第壹個數據成員放在偏移量為0的地方,然後按照#pragma pack指定的較小值和數據成員本身的長度進行每個數據成員的對齊。
2.結構(或聯合)的整體對齊規則:數據成員分別對齊後,結構(或聯合)也要對齊,按照#pragma pack指定的較小值和結構(或聯合)的最大數據成員長度進行對齊。
3.結合1和2可以推斷,當#pragma pack的n值等於或超過所有數據成員的長度時,這個n值的大小將沒有影響。