結構體:
結構體的引出是相對於陣列而言的,陣列要求陣列中的各個元素屬於同乙個型別,那麼有這些還不夠,有時候還需要將不同型別的資料組合成乙個有機的整體,以便於引用。於是c語言允許使用者指定這樣一種資料結構,它稱之為結構體。
關於結構體的問題,做如下說明:
宣告乙個結構體型別:
struct studentstudeng1,student2;
上面的student就是結構體名,括號內的就是該結構體的各個成員,這樣就構成了乙個結構體。這只是乙個結構體的型別。他是乙個型別而不是乙個變數,對於student而言,其中並無具體資料,系統對之也不分配實際的記憶體單元。
那怎麼使用結構體型別的資料?
那就應該定義結構體型別的變數,並在其中存放具體的資料。其中student1和student2 就是結構體型別的變數。
而其中的num,name等都是結構體成員。特別地:結構體成員還可以是結構體。
1:結構體的引用
原型:結構體變數名.成員名 (student1.num)
問題1:如果乙個結構成員還是乙個結構體該如何引用?
分析:
struct date //宣告乙個結構體型別
;struct student
student1,student2;
如果我想知道student1的出生的日數,可以這麼訪問:student1.birthday.day
結構體變數名與陣列一樣代表著結構體的首位址,可以引用結構體變數成員的位址,也可以引用結構體變數的位址。
如下:
scanf(「%d」,&student1.num);//輸入student1.num的值
printf(「%o」,&student1); //輸出student1的首位址
2:結構體陣列
乙個結構體變數中可以存放一組資料,如果有10個學生的資料需要參加運算,顯然應該用陣列,這就是結構體陣列。
struct studentstu[3];
3:指向結構體變數的指標
乙個結構體變數的指標就是該變數所佔據的記憶體位址的起始位址。
可以設乙個指標變數,用來指向乙個結構體變數,此時該指標變數的值就是結構體變數的起始位址。
指標變數也可以用來指向結構體陣列中的元素。
(關於結構體與指標之間的處理關係,在之後的章節中會專門討論)
共用體
使幾個不同的變數占用同一段記憶體的結構,稱為「共用體」型別的結構。它們從同一位址開始存放,也就是使用覆蓋技術,幾個變數之間相互覆蓋。
union data
a,b,c;
1:共用體變數的引用
只有先定義了共用體變數才能引用它,而且不能引用共用體變數,而只能引用共用體變數的成員
只有如下:a.i,a.ch等
2:共用體的特點
(1)同乙個記憶體的可以用來存放幾種不同型別的成員,但在每乙個瞬間只能存放其中一種,而不是同時存放幾種。也就是說每乙個瞬間只有乙個成員起作用,其他的成員不起作用。
(2)共用體變數中起作用的是最後一次存放的成員,在存入乙個新成員後原有的成員就失去作用
(3)共用體變數的位址和它各個成員的位址都是同一位址。
(4)不能對共用體變數名賦值,也不能企圖引用變數名來得到乙個值,又不能在定義共用體變數時對其初始化
(5)不能把共用體作為函式引數,也不能使函式帶回共用體變數,但可以使用指標共用體變數的指標
(6)共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列,反之亦可。
經典例題:
設有以下說明和定義:
typedef union
date;
struct data
too;
date max;
則:
printf("%d",sizeof(struct data)+sizeof(max));
的執行結果是:
分析:max是乙個共用體型別的變數,乙個共用體型別的變數的長度為其成員的最長長度:int k[5],即:5*4=20;
data是乙個結構體型別的變數,乙個結構體型別的變數長度為其各個成員長度之和:int cat,即:4
double dog的長度為:8
cow又是乙個共用體型別的長度,所以為20
總和長度就為:52
結構體與共用體
1.定義乙個機構體的形式 struct 結構名 2.定義結構體變數 變數名表列 變數名表列 3.結構體成員的表示方法 結構變數名.成員名 例如 boy1.num 如果成員本身又是乙個結構則必須逐級找到最低階的成員才能使用。例如 boy1.birthday.month 4.結構體陣列 方法和結構變數相...
結構體與共用體
結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們經常要傳送的不是簡單的位元組流 char型陣列 而是多種資料組合在一起的乙個整體。其表現形式是乙個結構體。簡單來說,結構體就是用來封裝資料的。結構體的定義 struct student struct student stu st...
結構體與共用體
結構體和共用體 聯合體 是自定義的資料型別,常用於處理非數值型資料,使用如 鍊錶 佇列 樹等。1.結構體定義 結構體是用其他型別構造出來的資料型別。結構體型別如下 struct student 定義乙個結構體變數如下 struct student stu1 stu1.age 32 stu1.name...