NDK啟航篇——C語言基礎(結構體補充)
- 2020 年 4 月 9 日
- 筆記

繼續昨天的內容,把結構體剩下的一點內容寫完。
結構體與動態內存分配
struct Man{ char *name; int age; } void main(){ //malloc 返回值默認是void* 所以我們最好寫成我們自己的類型 struct Man *m_p = (struct Man*)malloc(sizeof(struct Man) * 10); struct Man *p = m_p; //賦值 p->name = "Tom"; p->age = 10; p++; p->name = "Jerry"; p->age = 11; struct Man *loop_p = m_p; for(; loop_p <m_p +2;loop_p++){ printf("%s,%dn",loop_p->name,loop_p->age); } free(m_p); getchar(); }
typedef 類型取別名
- 取別名便於使用
- 不同的名稱代表在做不同的事情
- 不同情況下使用不同的別名
- 書寫簡潔
struct Man{ char name [20]; int age; }; //Age是int類型的別名 typedef int Age; //Ap是int類型指針的別名 typedef int * Ap; typedef struct Man JavaMan; typedef struct Man * Jn; //結構體取別名 typedef struct Woman{ char name[20]; int age; }W,*WP;//W是woman結構體的別名WP是woman結構體指針的別名 void main (){ int i =5; Ap p = &i; //結構體變量 W w1 = {"Rose",20}; //結構體指針 WP wp1 = &w1; printf("%s,%dn",w1.name,w1.age); printf("%s,%dn",wp1->name,wp1->age); getchar(); }
結構體函數指針成員
struct Girl{ char name[20]; int age; //函數指針 void (*sayHi)(char*); }; //Girl 結構體類似與Java中的類,name和age類似於屬性,sayHi類似於方法 void sayHi(char*text){ MessageBoxA(0,"Hi","title",0); } void main(){ struct Girl g1; g1.name = "Lucy"; g1.sayHi = sayHi; g1.sayHi("hello"); getchar(); }
- 和結構體同名的別名,省略寫struct
typedef struct Girl{ char name[20]; int age; //函數指針 void (*sayHi)(char*); }Girl; //Girl 結構體類似與Java中的類,name和age類似於屬性,sayHi類似於方法 void sayHi(char*text){ MessageBoxA(0,"Hi","title",0); } //Girl結構體指針取別名GirlP typedef Girl* GirlP; //改名 void rename(GirlP gp1){ gp1 -> name = "Lily"; } void main(){ Girl g1 = {"Lucy",18,sayHi}; GirlP gp1 = &g1; gp1->sayHi("Byebye!"); //傳遞指針,改名 rename(gp1); getchar(); }
- 字符串數組賦值,只能在聲明時賦值,但可以修改內容
char a[10] = "Happy"; //a = "Sad";不行 //可以修改內容 a[0]= "F"; //重新賦值 strcpy(a,"Sad"); //字符指針,可以多次賦值不同字符串 char *b = "Friend"; b = "Family"; b++; //*b = 'H';//不能修改字符內容