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