C语言_结构体和共用体

//***** 结构体 *****
void test1()
{
    struct book
    {
        char name[20];
        float price;
    };
    /*
    结构体其实就是自定义的数据类型,C语言虽然有很多数据类型,但开发复杂的应用程序的时候,这些还是不够的,这就需要自定义数据类型
    注意的是:共用体的成员不能同时被初始化,因为所有成员公用同一块内存,不能同时操作一块内存
    */
}

//***** 结构体多种定义方式 *****
void test2()
{
    // 第一种
    struct book1
    {
        char name[20];
        float price;
    };

    // 第二种
    struct book2
    {
        char name[20];
        float price;
    };
    typedef struct book2 Mybook;  // 给struct book2 取个别名 Mybook
}

//***** 结构体变量的初始化 *****
void test3()
{
    struct book
    {
        char name[20];
        float price;
    };
    typedef struct book Mybook;
    Mybook book1 = {"呼啸山庄",15.0f};
    printf("名称:%s\n",book1.name);
    printf("价格:%2.2f\n",book1.price);
}

//***** 结构体变量的赋值 *****
void test4()
{
    struct book
    {
        char name[20];
        float price;
    };
    typedef struct book Mybook;

    Mybook book1;
    strcpy(book1.name,"呼啸山庄");
    book1.price = 18.5f;

    printf("名称:%s\n",book1.name);
    printf("价格:%2.2f\n",book1.price);
}

//***** 结构体变量数组 *****
void test5()
{
    struct book
    {
        char name[20];
        float price;
    };
    typedef struct book Mybook;

    Mybook em[3] = {{"呼啸山庄",15.0f},{"三国演义",18.0f},{"水浒传",20.0f}};
    for(int i = 0; i < 3; i ++)
    {
        printf("名称:%s\t价格:%2.2f\n",em[i].name,em[i].price);
    }
}

//***** 结构体变量嵌套 *****
void test6()
{
    struct date
    {
        int year;
        int month;
        int day;
    };

    struct employees
    {
        char name[20];
        float pay;
        struct date Emdate;
    };

    struct employees em;
    strcpy(em.name,"麦海华");
    em.pay = 6000.0f;
    em.Emdate.year = 1985;
    em.Emdate.month = 5;
    em.Emdate.day = 16;

    printf("名称:%s\t工资:%4.2f\t生日:%04d-%02d-%02d\n",em.name,em.pay,em.Emdate.year,em.Emdate.month,em.Emdate.day);
}

//***** 结构体变量指针 *****
void test7()
{
    struct book
    {
        char name[20];
        float price;
    };

    struct book Mybook;
    struct book *ptr = NULL;
    ptr = &Mybook;
    strcpy(Mybook.name,"三国演义");
    Mybook.price = 15.0f;

    printf("名称:%s\t价格:%2.2f\n",ptr->name,ptr->price);

    /*
    "->" 指针运算符,如果是使用指针,则只能使用指针运算符操作它所指向的变量
    "."  点运算符,如果是结构体变量就可以使用,点运算符也称成员运算符
    */
}

//***** 结构体变量数组 *****
void test8()
{
    struct book
    {
        char name[20];
        float price;
    };

    struct book m_book[3] = {{"呼啸山庄",15.0f},{"三国演义",18.5f},{"水浒传",20.0f}};
    struct book *ptr = NULL;
    ptr = m_book;
    for(int i = 0; i < 3; i ++)
    {
        printf("名称:%s\t价格:%2.2f\n",ptr->name,ptr->price);
        ptr ++;
    }

    /*
    结构体指针操作结构体数组
    */
}

//***** 共用体 *****
void test9()
{
    union book
    {
        char name[20];
        char title[20];
    };

    /*
    共用体也是自定义的数据类型,但是该类型中的所有成员公用同一块内存,因此,一个成员被赋值,就等于所有成员都被赋了相同的值

    */
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值