/*结构体基本练习 */
#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);
}