結構體是一些值的集合,這些值成為它的成員。這和陣列有些類似。
結構體和陣列最大的不同是,陣列的元素都是相同型別的,而結構體裡的成員可以具有不同的型別。
陣列元素可以通過下標來訪問,而結構體成員長度可能不同,所以不能通過下標訪問。
每個結構體成員都有自己的名字,所以結構體成員是通過名字訪問的。
結構體變數屬於標量,所以可以向對其他標量一樣對結構體變數進行操作。
1. 結構體的宣告
結構體宣告時,必須列出它所包含的所有成員的名字和型別。
注意,在宣告結構體後要加分號 ' ; '。struct [結構體名]
[變數表];
變數表裡可以不寫,如果有在變數表裡寫變數,則表明在宣告這個結構體同時建立了變數。
幾個例子。
struct info;
這個宣告建立了乙個叫 info 的結構體,這個結構體包含三個成員:乙個整數id,乙個字串name,乙個浮點數height
struct infoy[20], *z;
這個宣告建立了乙個 struct info 型別的 y 和 z,y是乙個陣列,它包含20個結構體,z是乙個指標,它指向struct info型別。
2. 結構體的呼叫
以上面定義的結構體變數y和z為例
3. 結構體長度規則scanf("%d %s %f", &y[i].id, y[i].name, &y[i].height);
printf("%d,%s,%f", y[i].id, y[i].name, y[i].height);
scanf("%d %s %f", &z->id, z->name, &z->height);
printf("%d,%s,%f", z->id, z->name, z->height);
(1) 結構體的總長度一定是最長成員的整數倍(double除外)
(2) 每個成員的偏移量一定是該成員長度的整數倍。
聯合體的宣告
看上去和結構體差不多但是聯合體的所有成員共享同一段記憶體(只為最長成員分配空間)union [聯合體名]
[變數表];
(未完待續)
聯合體和結構體
一 前言 聯合體 union 與 結構體 struct 有一些相似之處。但兩者有本質上的不同。在結構體中,各成員有各自的記憶體空間,乙個結構變數的總長度是各成員長度之和 而在 聯合 中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度 應該說明的是,這裡所謂的共享不是指把多個成員同...
結構體聯合體
在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...
C 結構體和聯合體
結構體資料對齊問題 使用union定義的是聯合體 利用union可以用相同的儲存空間儲存不同型別的資料型別,從而節省記憶體空間。當訪問其內成員時可用 和 來直接訪問。當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體 union 在c programming language 一書中...