C C 學習筆記24 結構體與共用體

2021-06-23 07:56:03 字數 2310 閱讀 7766

結構體:

結構體的引出是相對於陣列而言的,陣列要求陣列中的各個元素屬於同乙個型別,那麼有這些還不夠,有時候還需要將不同型別的資料組合成乙個有機的整體,以便於引用。於是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...