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