當前位置:成語大全網 - 新華字典 - c語言中的結構

c語言中的結構

在C語言中,結構指的是壹種數據結構,是C語言中的壹種聚合數據類型。結構可以聲明為變量、指針或數組,以實現更復雜的數據結構。結構也是元素的集合,這些元素被稱為結構的成員,這些成員可以是不同的類型,成員壹般通過名稱來訪問。結構的定義如下:struct是結構的關鍵字,tag是結構的符號,member-list是結構的成員列表,必須列出其所有成員;variable-列出為此結構聲明的變量。?struct?標簽?{?會員名單?}?變量列表?;?在正常情況下,必須至少有兩個標記,成員列表和變量列表部分。下面是壹個例子://這個聲明聲明了壹個有三個成員的結構,分別是壹個整數A,壹個字符B和壹個雙精度c//它還聲明了結構變量s1//這個結構沒有指明它的標簽struct?{int?a;夏爾?b;雙倍?c;}?s 1;//如上,聲明三個成員的結構,分別是整數A,字符B,雙精度c//。結構的標簽命名為SIMPLE,變量struct沒有聲明?簡單{int?a;夏爾?b;雙倍?c;};//結構標註簡單,並聲明變量t1,t2,t3struct?簡單?t1,?t2[20],?* t3?//還可以用typedef創建壹個新的typedef?struct{int?a;夏爾?b;雙倍?c;?}?Simple2//現在可以用Simple2作為類型聲明壹個新的結構變量Simple2?u1,?u2[20],?* u3在上面的語句中,第壹條和第二條語句被編譯器視為兩種完全不同的類型,即使它們的成員列表相同,如果T3 = &;S1不合法。

壹個結構的成員可以包含其他結構或者指向自己結構類型的指針,通常這個指針的應用是實現壹些更高級的數據結構比如鏈表、樹。//此結構的聲明包含其他結構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值的大小將沒有影響。