在實際應用中,某個物件由不同型別的資料組成,比如學生的姓名為字串型,學號可為整形或者字串型,性別為列舉型別,身高為浮點型。
很顯然,不可能用乙個陣列來存放這些資料。c語言用一種構造資料型別——結構體來表示這個物件。
一、定義結構體變數
結構體和列舉一樣,需要先定義結構體,再定義結構體變數。
1、定義結構體:struct是結構體的關鍵字,定義乙個結構體的一般形式為:
/*struct 結構體名;
*/struct
student ;
2、定義結構體變數
定義好結構體之後,就可以定義結構體變數。常見的3種定義結構體變數方式:
(1) 先定義結構體型別,再定義變數
(2) 定義結構體型別的同時定義變數
(3) 直接定義結構體型別變數,省略型別名
/*struct student ;
struct student stu; //第一種方式
//第二種方式
struct student stu;
//第三種方式
struct stu;
二、定義結構體的注意事項
(1) 結構體內部的資料型別不能是該結構體本身,即不能遞迴定義
(2) 結構體內部的資料型別可以是已經定義好的結構體
(3) 定義結構體型別,只是說明了該型別的組成情況,並沒有給它分配儲存空間,就像系統不為int型別本身分配空間一樣。只有當定義屬於結構體型別的變數時,
系統才會分配儲存空間給該變數
(4) 結構體變數占用的記憶體空間是其成員所佔記憶體之和,而且各成員在記憶體中按定義的順序依次排列
/*struct student ;
*/struct
date ;
struct
student ; //
此時並沒有分配儲存空間
struct student stu; //
給變數stu分配儲存空間
struct
stu; //
stu占用的記憶體空間,4 + 4 + 4 = 12
三、 結構體變數的初始化
初始化結構體變數有兩種發法:
(1) 將各成員的初值,按順序地放在一對大括號{}中,並用逗號分隔,一一對應賦值。
(2) 在大括號內,將點和成員名組合在一起,並賦值,成員名的順序是任意的。
要注意的是,只能在定義變數的同時進行初始化賦值,初始化賦值和變數的定義不能分開。
structstudent ;
struct student stu = ; //
第一種方法初始化
struct student stu1 = ; //
第二種方法初始化
/*錯誤的初始化
struct student stu;
stu = ;
*/
四、訪問結構體變數的成員
(1) 一般對結構體變數的操作是以成員為單位進行的,引用的一般形式為:結構體變數名.成員名。
(2) 如果某個成員也是結構體變數,可以連續使用成員運算子"."訪問最低一級成員。
(3) 相同型別的結構體變數之間可以進行整體賦值。
structdate ;
struct
student ;
struct student stu; //
給變數stu分配儲存空間
stu.age = 17; //
給成員變數賦值
stu.birthday.year = 2000; //
給結構體成員的成員賦值
struct student stu1 = stu; //
將stu直接賦值給stu1
五、結構體陣列
(1) 定義結構體陣列變數和定義結構體變數一樣,有三種方式。初始化也和結構體變數一樣。
(2) 結構體陣列的訪問方式和陣列一樣。
structdate date[
3]; //
定義結構體陣列變數
struct
student ;
struct student stu[2] = ,}; //
定義結構體陣列變數,並初始化
struct
stus[3]; //
定義結構體陣列變數
stus[0].age = 12; //
給結構體陣列成員賦值
六、指向結構體的指標
(1) 結構體變數都有自己的儲存空間和位址,因此指標也可以指向結構體變數。
(2) 結構體指標變數的定義形式:struct 結構體名稱 *指標變數名。
(3) 結構體指標訪問結構體成員的方法:
第一種:(*指標變數名).成員名
第二種:指標變數名->成員名
structdate ;
//定義結構體陣列變數
struct date date = ;
struct date *p = &date;
(*p).year = 1990; //
第一種方式,給結構體賦值
p->month = 11; //
第二種方式,給結構體賦值
黑馬程式設計師 C語言 結構體
android培訓 ios培訓 期待與您交流!結構體的作用 結構體是一種構造型別,使用非常頻繁。當我們需要把不同型別的資料構成乙個整體時,便會用到結構體了。結構體型別的定義 注意 在函式裡面或者外面都可以定義 影響作用域為全域性型別或者區域性型別 舉例 struct person 此時只是定義了乙個...
黑馬程式設計師 C語言 結構體 列舉
asp.net unity開發 net培訓 期待與您交流!定義乙個名為student的結構體,定義型別時系統並沒有為它分配記憶體 struct student 儲存的位址是連續的,按定義順序排 定義乙個結構體變數,此時系統為stu分配了記憶體 struct student stu 所有成員佔的儲存空...
黑馬程式設計師 c語言結構體介紹
結構體 構造型別 陣列 陣列 只能由多個相同型別的資料構成 結構體 可以由多個不同的型別的資料 結構體型別 結構體變數名 1.定義結構體型別 struct person 2.根據結構體型別,定義結構體變數 struct person p p為結構體變數 單獨賦值 p.age 30 p.name ro...