一、概念
1. 結構體是由基本資料型別構成的,並由乙個識別符號來命名的各種變數的組合。結構體中可以使用不同的資料型別。
2. 在實際應用中,我們通常需要由不同型別的資料來構成乙個整體,比如學生這個整體可以由姓名、年齡、身高等資料構成,這些資料都具有不同的型別,姓名可以是字串型別,年齡可以是整型,身高可以是浮點型。
二、結構體的定義
1. 定義形式
結構體內部的元素,也就是組成部分,我們一般稱作「成員」
結構體定義形式一般是:
struct 結構體名;
如我們定義乙個personstruct person ;
2. 定義結構體變數
前面只是定義了名字為student的結構體型別,並非定義了乙個結構體變數,就像int一樣,只是一種型別。
結構體定義有多種樣式:
1> 先定義結構體型別,在定義變數
struct student ;
struct student stu;
2> 定義結構體的同時定義變數struct student stu;
3> 直接定義結構體型別變數,省略型別名struct stu;
三、注意事項
1. 不允許對結構體本身遞迴定義
struct student ;
2. 結構體內可以包含別的結構體struct date ;
struct student ;
3. 定義結構體型別,只是說明了該型別的組成情況,並沒有給它分配儲存空間,就像系統不為int型別本身分配空間一樣。只有當定義屬於結構體型別的變數時,系統才會分配儲存空間給該變數struct student ;
struct student stu; // 這裡才分配儲存空間
4. 結構體變數占用的記憶體空間是其成員所佔記憶體之和,而且各成員在記憶體中按定義的順序依次排列struct student ;
四、結構體的初始化
將各成員的初值,按順序地放在一對大括號{}中,並用逗號分隔,一一對應賦值。
比如初始化student結構體變數stu
struct student ;
struct student stu = ;
只能在定義變數的同時進行初始化賦值,初始化賦值和變數的定義不能分開,下面的做法是錯誤的:struct student stu;
stu = ;
五、結構體的使用
1. 一般對結構體變數的操作是以成員為單位進行的,引用的一般形式為:結構體變數名.成員名
struct student ;
struct student stu;
// 訪問stu的age成員
stu.age = 27;
2. 如果某個成員也是結構體變數,
可以連續使用成員運算子"."訪問最低一級成員
struct date ;
struct student ;
struct student stu;
stu.birthday.year = 1986;
stu.birthday.month = 9;
stu.birthday.day = 10;
六、結構體陣列
1. 定義形式與結構體變數一樣,也有三種形式
struct student ;
struct student stu[5]; //定義1
2. 初始化struct stu[2] = , };
七、結構體作為函式引數
將結構體變數作為函式引數進行傳遞時,其實傳遞的是全部成員的值,也就是將實參中成員的值一一賦值給對應的形參成員。因此,形參的改變不會影響到實參。
#include // 定義乙個結構體
struct student ;
void test(struct student stu)
int main(int argc, const char * argv) ;
printf("修改前的實參:%d \n", stu.age); // 30
// 呼叫test函式
test(stu); // 30 10
printf("修改後的實參:%d \n", stu.age); // 30
return 0;
}
struct 結構體名稱 *指標變數名* 有了指向結構體的指標,那麼就有
3種訪問結構體成員的方式 (等效)
結構體變數名.成員名
(*指標變數名).成員名
指標變數名->成員名
#include int main(int argc, const char * argv) ;
// 定義乙個結構體變數
struct student stu = ;
// 定義乙個指向結構體的指標變數
struct student *p;
// 指向結構體變數stu
p = &stu;
/*這時候可以用3種方式訪問結構體的成員
*/// 方式1:結構體變數名.成員名
printf("name=%s, age = %d \n", stu.name, stu.age);
// 方式2:(*指標變數名).成員名
printf("name=%s, age = %d \n", (*p).name, (*p).age);
// 方式3:指標變數名->成員名
printf("name=%s, age = %d \n", p->name, p->age);
return 0;
}
C語言結構體
1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...
C語言 結構體
宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...
c語言 結構體
1 定義結構體 c語言允許使用者自己建立不同型別資料組成的組合型的資料結構 struct 結構體名 1 結構體的型別不是只有一種,可以根據需要設計許多種,如struct student struct worker等 2 結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式 2 定義結構體變數...