結構體與共用體小結

2022-03-30 23:14:06 字數 2350 閱讀 8718

一,結構體的概念和定義

1,結構體的定義

struct 結構體名

;這裡資料型別可以是復合型別,例如又是乙個結構體型別,即巢狀;

2,結構體變數的定義

struct 結構體名 變數名1,變數名2,,,變數名n;

或:struct 結構體名

結構體變數1,結構體變數2;

或:struct

結構體變數1,結構體變數2;

三種方式,第三種方式的話,每次要定義這個型別的結構體變數都要重複的寫這

一段**;

其實定義了結構體後,struct 結構體名就是一種新的型別,上述語句就像宣告

變數一樣;

3,結構體變數的引用

只能對結構體變數中的各個成員分別輸出,不能對乙個結構體變數作為乙個整體

輸出;巢狀的結構體型別的引用:

結構體變數名.結構體型別成員名.內嵌結構體的成員名;

4,結構體變數的初始化

struct 結構體名 變數名 = ;

或者在定義的時候就初始化:

struct 結構體名

變數名 = ;

二,結構體陣列

1,結構體陣列的定義舉例

struct stu

;struct stu student[5];

或者:struct stu

student[5];

或者:struct

student[5];

跟定義結構體變數的三種形式是一樣的,只不過這裡每次定義的結構體變數是一

個陣列;每乙個student[i]都是struct stu型別的;

2,結構體陣列的初始化和引用

略;三,結構體與指標

1,指向結構體的指標的定義,同上,也是三種形式;

struct employees employee1,*p1;

或者:struct employees

employee1,*p1;

或者:struct

employee1,*p1;

2,用結構體變數指標來引用結構體成員的兩種操作:

(*結構體變數的指標名).成員名;

如:(*p1).name;括號不能省略,.的優先順序是最高的;

或:結構體變數的指標名->成員名;

如:p1->name;

注意.和->的優先順序是最高的;

employee1.name;

(*p1).name;

p1->name;

是等價的;

3,結構體陣列與指標

struct stu

student[5],*p;

此時可以

p = student;此時p指向student[0];

(2)也可把student的其他元素的位址賦給p

p = &student[3];

(3)利用指標移動如p++使p指向結構體陣列的不同元素;

四,結構體作為函式引數

1,結構體變數作為函式引數

2,指向結構體變數的指標作為函式引數

略,在後續文章裡將給出乙個例子;

五,共用體(聯合體)

它可以表示幾種不同型別的變數共用同一起始位址的記憶體單元,其定義形式,變

量說明,引用方式都類似於結構體,本質差別在於兩者的儲存方式不一樣:結構

體變數的各個成員變數在儲存時,各佔不同起始位址的記憶體單元,而共用體的各個成員在儲存時,共用同一起始位址的儲存單元;

1,共用體的定義

三種方式和結構體一樣

union data

;union data a,b,c;

或者:union data

a,b,c;

或者:union

a,b,c;

在型別定義時,系統並未給共用體分配具體的儲存空間,只有當定義了這種共用

體型別的變數時,系統才為這種共用體型別的變數分配空間;乙個共用空間的大

小相同,大小為成員項中佔空間最大的那乙個;

2,共用體變數的引用

union data a,*p;

其引用形式:

a.i;a.f;a.ch;或者

p = &a;p->=5;p->=4.3;p->='a';

由共用體的儲存特性,知道&a,&a.i,&a.f,&a.ch都是同乙個值;

c規定,不能把共用體變數作為函式引數或函式返回型別;

在某一時刻,共用體的儲存空間只能儲存乙個成員的資料,在給不同的成員資料

賦值時,要注意最後引用的時候儲存的是哪乙個成員變數;

如下面的賦值就是不對的:

union

a = ;一次只能給乙個成員賦值,且共用體空間儲存的是最後的那個成員的值;

另外,共用體也能巢狀,也可定義共用體陣列,在這裡不再詳述,形式和結構體一樣;

結構體與共用體

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...