15 结构体基本练习
/*结构体基本练习 */ #include <stdio.h> #include<stdbool.h> #define MALE 0 //男 0 #define FEMALE 1 //女 1 #define MAXNAME 30 //名字数组最多字符数 #define MAXFR 10 //结构体数组最大数 #define DYSIZE 100 //假设动态分配100个结构体数组 void showstruct(struct Myfriend* friends); //显示函数声明 struct Myfriend //定义 struct Myfriend 数据类型 { char name[MAXNAME]; bool sex; int age; }; main() { struct Myfriend fr1 = { "lili",FEMALE,22 }; //定义 struct Myfriend 数据类型的变量fr1,并初始化 struct Myfriend* pfr1; //定义可以存放struct Myfiend 类型变量的地址的指针fr; pfr1 = &fr1; // pfr1 指向fr1,即存放fr1 的地址; //结构变量赋值 fr1.age = 21; pfr1->name[0] = 'L'; // pfr1->*(name+2) = 'L'; //error, 打算修改第三个字符,报错 pfr1->age = 20; pfr1->sex = MALE; //结构变量输出 printf("%s %d %d\n", fr1.name, pfr1->sex, fr1.age); //结构体数组 struct Myfriend frs[MAXFR]; struct Myfriend* pfrs; //指向结构体数组第一个元素 pfrs = &frs[0]; strncpy(frs[0].name, "zhangsan", MAXNAME); //不能直接赋值,折腾了1个小时。。。 frs[0].sex = MALE; pfrs->age = 30; printf("%s %d %d\n", frs[0].name, pfrs->sex, frs[0].age); //调用显示函数 showstruct(pfrs); printf("******************************\n"); /*动态内存分配方式 申请sizeof(struct Myfriend) * DYSIZE 个结构体 内存 malloc 返回这么多内存的首地址,只是一个地址,并不代表后面有多少是一体的,可能是int ,double 加上(struct Myfriend*) 说明这个首地址之后 struct Myfriend 为一块,给结构体用 struct Myfriend* frs2 定义frs2 是一个可以指向struct Myfriend 结构体的变量 整个语句完成,* frs2 代表了 这个机构体变量, 类似上面的frs[MAXFR] 因为是数组, frs2 刚好指向了frs2[0],变成数组名和指针的关系 一句完成三句功能,外加动态分配内存功能,实在是妙!! 别忘了释放内存 */ struct Myfriend* frs2 = (struct Myfriend*)malloc(sizeof(struct Myfriend) * DYSIZE); strncpy(frs2->name, "zhangsan", MAXNAME); //不能直接赋值,折腾了1个小时。。。 frs2->sex = MALE; frs2->age = 30; printf("malloc \n"); showstruct(frs2); free(frs2); } //显示函数 void showstruct(struct Myfriend* friends) { printf("%s %d %d\n", friends->name, friends->sex, friends->age); }