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);

}

 

posted @ 2020-05-31 04:36  abel2020  阅读(191)  评论(0编辑  收藏  举报