結構體理解與應用

2021-07-25 08:48:14 字數 1814 閱讀 1555

知道為什麼要結構化資訊

下面用**說明乙個簡單的**

int id[4]=;

char name[4][16]=;

char phone[4][16]=;

這種方法表達乙個**資訊,表示的資訊不直觀,最重要的是資料的訪問不方便,比如要按id來查詢乙個人,那麼用上面這種方式儲存資訊,來顯示查詢結果就要對下面函式的每個傳入引數都輸出,就會很麻煩。要寫個函式

int find(int id,char name,char phone){};

於是就可以用下面一種想法:有一種新的資料型別,直接表示聯絡人所有屬性。

比如定義新的資料型別 contact

contact persons[4];//contact就是一種新的結構體型別

contact find(int

id);//根據id查詢,返回的就是contact物件

或者下面**

int find(int

id,contact* p)//

2. 接觸結構體struct

struct可以產生新的資料型別,所以也叫「自定義型別」

對於上面的資訊,可以定義如下形式

struct contact

; //定義了乙個新的資料型別contact,擁有3個成員變數

上面定義的新的資料型別可以有如下使用方法

1.contact c;

2.contact cs[4];

3.contact* pc=&c;

4.void test(contact c);

5.contact make(int

id);

3. 結構體的定義和初始化

對上面定義的新的結構體初始化如下:

contact a=;

注意三點:使用大括號,末尾加分號;各個字段初始值要與定義結構體的字段順序匹配;初始值用逗號隔開;

也可以初始化直接賦值0

contact a=;

下面用結構體對最開始的**賦初始值。

int main()

, , ,

} return 0;

}

這種初始化方式就清晰明了的表達了最開始的**的資訊

5- 結構體更多的使用方法

- 結構體是可以相互賦值的,就和類的物件一樣

int main()

; contact b = a;

contact* p = &a;

return0;}

- 結構體作為函式引數(兩種形式)

void tset(contact a)

void tset(contact* p)//contact前面加了const,則這個結構體的值只允許讀,不允許寫

在c++中,盡量只用下面一種傳位址的方式來寫函式,這樣傳遞效率高。

- 作為函式返回值

contact make(int

id)但是我們常常寫成下面形式

void make(int

id,contact* a)

原因:*結構體之間只支援=,不支援加減乘除(利用過載操作可以支援)

- 理解結構體大小

結構體的大小跟成員變數有關,但比成員變數之和要大,因為編譯器會對結構體型別進行填充,以保證結構體大小是4的整數倍。

- 結構體可以作為下乙個結構體的成員變數

struct score

;struct student

;注意,score必須在student之前定義

以上是結構體的一些基本知識點,可以參考;

結構體指標的應用理解

在cjson呼叫時遇到的結構體引數賦值時的問題,需要cjson 才行,下面兩種方法都行,對比一下。也對指標理解更深入 結構體給函式當形參時,由於主函式裡也沒分配結構體空間,只有結構體的位址,區域性函式裡面只能給區域性結構體位址,給結構體的位址放在結構體位址的空間中,要有存放結構體位址空間的位址,也就...

結構體與函式應用

includestruct xyz struct xyz xyz of int x,long y,double z int main void s xyz of 12,7654321,35.689 printf s.x d n s.x printf s.y ld n s.y printf s.z f...

和結構體 結構體型別與結構體變數

結構體 struct 是由一系列具有相同型別或不同型別的資料構成的資料集合,叫做結構體。在c語言中,結構體 struct 指的是一種資料結構,是c語言中聚合資料型別 aggregate data type 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素...