NDK啟航篇——C語言基礎(結構體補充)

繼續昨天的內容,把結構體剩下的一點內容寫完。

結構體與動態內存分配

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';//不能修改字符內容

結構體的知識點到這裡就寫完了,明天寫聯合體,欲速則不達,慢慢來不着急。