知道為什麼要結構化資訊
下面用**說明乙個簡單的**
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 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素...