結構體和聯合體

2021-08-21 21:11:01 字數 1193 閱讀 7505

結構體是一些值的集合,這些值成為它的成員。這和陣列有些類似。

結構體和陣列最大的不同是,陣列的元素都是相同型別的,而結構體裡的成員可以具有不同的型別。

陣列元素可以通過下標來訪問,而結構體成員長度可能不同,所以不能通過下標訪問。

每個結構體成員都有自己的名字,所以結構體成員是通過名字訪問的。

結構體變數屬於標量,所以可以向對其他標量一樣對結構體變數進行操作。

1. 結構體的宣告

結構體宣告時,必須列出它所包含的所有成員的名字和型別。

struct [結構體名]

[變數表];

注意,在宣告結構體後要加分號 ' ; '。

變數表裡可以不寫,如果有在變數表裡寫變數,則表明在宣告這個結構體同時建立了變數。

幾個例子。

struct info;
這個宣告建立了乙個叫 info 的結構體,這個結構體包含三個成員:乙個整數id,乙個字串name,乙個浮點數height

struct infoy[20], *z;
這個宣告建立了乙個 struct info 型別的 y 和 z,y是乙個陣列,它包含20個結構體,z是乙個指標,它指向struct info型別。

2. 結構體的呼叫

以上面定義的結構體變數y和z為例

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);

3. 結構體長度規則

(1) 結構體的總長度一定是最長成員的整數倍(double除外)

(2) 每個成員的偏移量一定是該成員長度的整數倍。

聯合體的宣告

union [聯合體名]

[變數表];

看上去和結構體差不多但是聯合體的所有成員共享同一段記憶體(只為最長成員分配空間)

(未完待續)

聯合體和結構體

一 前言 聯合體 union 與 結構體 struct 有一些相似之處。但兩者有本質上的不同。在結構體中,各成員有各自的記憶體空間,乙個結構變數的總長度是各成員長度之和 而在 聯合 中,各成員共享一段記憶體空間,乙個聯合變數的長度等於各成員中最長的長度 應該說明的是,這裡所謂的共享不是指把多個成員同...

結構體聯合體

在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...

C 結構體和聯合體

結構體資料對齊問題 使用union定義的是聯合體 利用union可以用相同的儲存空間儲存不同型別的資料型別,從而節省記憶體空間。當訪問其內成員時可用 和 來直接訪問。當多個資料需要共享記憶體或者多個資料每次只取其一時,可以利用聯合體 union 在c programming language 一書中...