一篇文章了解结构体(简单易懂版)

2024-09-18 - 笔记 -14
作者(Author): 仟濹(网名)

结构体

结构体是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。

结构体的声明(重要)

自己起的名字,为了方便记忆和复盘,并不是规范的名字

  1. 直接使用法(只能使用一次)

    不写结构体名,只写结构体变量,所以只能使用一次

    struct
    {
        char name[20];
        char sex[10];
    }BB;//BB 为机构体变量名
    
  2. 直接声明法 (结构体可以使用多次,或者叫类型可以使用多次)

    写机构体名,所以后续想继续使用此机构体类型,仍可以定义此类型的结构体变量

    struct AA //AA 为机构体名
    {
        char name[20];
        char sex[10];
    };
    struct AA BB, CC;
    //BB 和 CC就是机构体变量名
    
  3. 直接定义法

    声明结构体的同时也声明了结构体变量名。

    struct AA //AA 为机构体名
    {
        char name[20];
        char sex[10];
    }ABC;
    struct AA BB, CC;
    //BB 和 CC就是机构体变量名,ABC 也是结构体变量名
    
  4. 类型定义法

    typedef struct AA //AA 为结构体名
    {
        char name[20];
        char sex[10];
    }ABC;//重新命名,可以想成 ABC 代替了 struct AA,方便后期使用。
    
    
    //此时这里的ABC就不是结构体变量了,而是将结构体类型重新写了一个名字,方便使用,否则每次定义机构体变量都要写struct AA,这样再次定义结构体变量就可以直接使用ABC作为类型了。
    struct AA BB, CC;
    ABC BB, CC;//效果与struct AA BB, CC;相同
    

结构体成员的访问

  1. 普通访问

    struct AA
    {
        char name[20] = "ZLH";
        char sex[10] = "男";
    }BBB;
    printf("name: %s, Sex: %s\n", BBB.name, BBB.sex);
    
  2. 指针访问(重要)

    struct AA
    {
        char name[20] = "ZLH";
        char sex[10] = "男";
    }BBB, *p = &BBB;
    printf("name: %s, Sex: %s\n", BBB.name, BBB.sex);
    printf("name: %s, Sex: %s\n", p -> name, p -> sex);
    

结构体变量 作为 函数参数 (重要) 容易生疏

void print1(struct Peo P)//正常传
{
    printf("%s, %s", p.name, p.sex);
}

void print2(struct Peo *P)//正常传
{
    printf("%s, %s", p->name, p->sex);
}

struct AA
{
    char name[20] = "ZLH";
    char sex[10] = "男";
}BBB;
print1(BBB);//传整个结构体成员
print2(&BBB);//传结构体变量地址

  1. 正常传 - 结构体传

    如果成员过多,可能会浪费空间,因为函数形参是实参的临时拷贝,所以学要临时开辟新的空间来存储数据,就会造成空间的不合理利用,导致浪费。传地址就会避免这种情况,只会传一个指针变量的大小,(指针变量大小: 32位的地址是4字节,64位的地址是8字节),这样子占用的空间就可能小了很多了。

    这样其实是把整个结构体成员全都传过来了,不是传的地址。

    void print1(struct Peo P)//正常传
    {
        printf("%s, %s", p.name, p.sex);
    }
    
  2. 传地址 - 结构体的地址传【推荐方法】

    void print2(struct Peo *P)//传地址
    {
        printf("%s, %s", p->name, p->sex);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值