C語言 結構體

2021-07-05 00:08:45 字數 3169 閱讀 6467

一、概念

1. 結構體是由基本資料型別構成的,並由乙個識別符號來命名的各種變數的組合。結構體中可以使用不同的資料型別。

2. 在實際應用中,我們通常需要由不同型別的資料來構成乙個整體,比如學生這個整體可以由姓名、年齡、身高等資料構成,這些資料都具有不同的型別,姓名可以是字串型別,年齡可以是整型,身高可以是浮點型。

二、結構體的定義

1. 定義形式

結構體內部的元素,也就是組成部分,我們一般稱作「成員」

結構體定義形式一般是:

struct 結構體名;
如我們定義乙個person
struct 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 定義結構體變數...