知識點11 結構體與共用體

2021-10-18 03:20:44 字數 2834 閱讀 1973

1,定義結構體型別:結構體名與成員表列

struct

date

//結構體名(大寫以突出)

;//最後要有乙個分號!!

//建立了乙個結構體型別之後,date就成為了乙個新的變數型別

struct

student

;

注意:變數型別 ≠

\not=

​= 變數

2,結構體變數的定義

struct

student s1,s2;

//定義結構體型別的變數(可以先宣告再定義)

/*也可以在宣告型別的同時定義變數:

struct student

s1,s2;

*//*若該結構體型別只用一次,也可以不命名,直接定義

struct

s1,s2;

*/

3,結構體變數的初始化

可以在定義時或者定義之後對結構體初始化。一般情況下都是在定義的同時進行初始化,因為那樣比較方便。如果定義之後再進行初始化,那就只能乙個乙個的對成員進行賦值(就如同陣列一樣,陣列只能在定義的時候才可以一次性對所有元素進行初始化,如果定義之後再初始化就只能乙個乙個的賦值了),那樣比較麻煩。

struct

student s1 =};

//方便

/*或:

struct student s1;

strcpy(s1.name, "shao");//注意:字串不能直接賦值,要用strcpy函式

s1.score = 100;

s1.birthday.month = 5;//需要逐級找到最低階的成員才能使用

... */

注意當結構體變數成員中含有指標型別時,對於指向相同內容的指標,應使他們儲存的位址不同,但位址指向的內容相同。

struct

s1, s2;

intmain()

4,結構體陣列

每個元素都是乙個結構體變數

struct

employee

emp[3]

=,,}

;

5,結構體變數作函式引數
#

include

struct

student

;void

input

(struct

student stu)

}struct

student

max(

struct

student stu)

//函式的型別也要用結構體型別

void

print

(struct

student stud)

//該函式的形參是乙個變數而不是乙個陣列,直接將變數的資訊傳遞過來而不是位址

intmain()

在形參的位置使用結構體變數,在函式呼叫期間,形參也要占用記憶體。因此這種傳遞方式在空間和時間上開銷都比較大。另外「值傳遞」使得若在函式內修改了變數的值,這種改變不會返回到主程式中。

6,結構體變數的指標作函式引數

#

include

struct

student

;void

input

(struct

student

*p)//直接對結構體進行操作

}struct

student

max(

struct

student stu)

//函式的型別也要用結構體型別

void

print

(struct

student stud)

//該函式的形參是乙個變數而不是乙個陣列,直接將變數的資訊傳遞過來而不是位址

intmain()

7,用typedef簡化結構體
#

include

#include

#define

sqr(n)

((n)

*(n)

)//簡化函式

typedef

struct

point;

//簡化結構體型別名

double

dis(point a, point b)

intmain()

共用體變數的定義方式與結構體變數很相似

union data

a, b, c;

值得注意的是:結構體變數大小是所包含的成員所佔位元組數的總和,其中每個成員都有自己的記憶體單元;共用體的大小為所包含成員中的最大記憶體長度。

共用體變數的位址與各成員的位址都是同一位址。

儘管共用體內的各成員共用一段記憶體,但引用時只能引用成員而不能直接引用共用體變數。printf("%d", a);是錯誤的。

對共用體變數進行初始化時,只需乙個初始化值就夠了,其型別應與共用體內第乙個成員的型別相同。

在共用體中只有乙個成員起作用。

#

include

union data

a;int

main()

;//初始化表中只能有乙個常量,起作用的只是最後一次賦值的量,因為所有二進位制位都會覆蓋(取代)

printf

("\n%d"

, a.i)

;//會輸出97

return0;

}

結構體與共用體

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