C语言/结构体struct 、typedef在结构体中的用法

目录

1‌‌ 结构体

1.1 结构声明

1.2 结构体的组成

1.3 结构的成员

1.4 结构变量

2 运算符“.”

3 typedef在结构体中的应用


1‌‌ 结构体

结构体(struct)‌: C/C++中一种用户‌自定义的复合数据类型‌,允许将多个不同类型的变量组合成一个整体,类似于Python、Java中的

格式:

struct 可选标记{
    成员1;
    成员2;
    ...
}结构变量;

1.1 结构声明

结构声明:一种用户自定义的数据类型,用于将多个不同类型的数据组合成一个逻辑单元;结构声明不会创建实际的数据对象,只是描述了该对象由什么组成;结构声明也可以称为模板

示例1: 

/*people为该结构体类型名,也称people结构布局*/
struct people {
    char name[20];
    float height;
    float weight;
    int age;
};

1.2 结构体的组成

结构体的组成:在示例1中,跟在关键字struct后的people是一个可选标记,也可以认为是这个结构体的名字,但是这个名字是可选的(也就是说我可以不给它取名字,如示例4);随后“{}”中的内容包含{}称为结构,“;”表明一个结构体的声明结束。

1.3 结构的成员

结构的成员:在结构中的char name[20]、float height、float weight和int age都称为这个结构的成员字段

示例2:

 /*people为该结构体类型名,也称people结构布局*/
struct people {
    char name[20];
    float height;
    float weight;
    int age;
}xiaoming;  //xiaoming为people结构布局的结构变量

1.4 结构变量

结构变量:在示例2中,声明的最后一排“}”后的xiaoming就是一个使用people结构布局结构变量。

示例3:

struct people xiaoming;  //等同于示例2

对比示例2和示例3,其实我们可以省略示例2中的people标记(如示例4),但是这种写法不适合需要多次使用people结构布局的情况(也就是说在程序中仅使用一两次该模板时可以使用示例4写法)。

示例4:

struct{
    char name[20];
    float height;
    float weight;
    int age;
}xiaoming;

示例5:

#include <stdio.h>
#include <string.h>

 /*people为该结构体类型名,也称people结构布局*/
struct people{
    char name[20];
    float height;
    float weight;
    int age;
};

int main(void) {
    struct people xiaoming;/*声明xiaoming为一个使用people结构布局的结构变量*/
    struct people xiaogang;/*声明xiaogang为一个使用people结构布局的结构变量*/

    strcpy(xiaoming.name, "小明");
    xiaoming.height = 175.5;  
    xiaoming.weight = 65.5;   
    xiaoming.age = 25;       

    strcpy(xiaogang.name, "小刚");
    xiaogang.height = 170.5;  
    xiaogang.weight = 62.5;   
    xiaogang.age = 23;
    xiaogang.age = 24; //覆盖23,最终打印值为24

    printf("姓名:%s\n身高:%.2f cm\n体重:%.2f kg\n年龄:%d 岁\n\n", xiaoming.name, xiaoming.height, xiaoming.weight, xiaoming.age);
    printf("姓名:%s\n身高:%.2f cm\n体重:%.2f kg\n年龄:%d 岁  \n", xiaogang.name, xiaogang.height, xiaogang.weight, xiaogang.age);

    return 0;
}

运行结果:

姓名:小明
身高:175.50 cm
体重:65.50 kg
年龄:25 岁

姓名:小刚
身高:170.50 cm
体重:62.50 kg
年龄:24 岁

从示例5来看,直接使用结构体类型名people声明了两个结构变量,缩短了代码量。

2 运算符“.”

运算符“.”:可以直接在结构变量后使用“.”引出结构成员为其赋值;如果要重新赋成员值,可以再次通过“.”的方法覆盖前一次的赋值,其方法同变量相同。

3 typedef在结构体中的应用

typedef:现有类型定义一个新的别名,用于增强代码可读性和可维护性。

示例6:

#include <stdio.h>
#include <string.h>

typedef struct{
    char name[20];
    float height;
    float weight;
    int age;
}People;  //People是结构体的别名

int main(void) {
    People xiaoming; /*声明一个People类型的结构变量 xiaoming*/

    strcpy(xiaoming.name, "小明");
    xiaoming.height = 175.5;  
    xiaoming.weight = 65.5;   
    xiaoming.age = 25;       

    printf("姓名:%s\n身高:%.2f cm\n体重:%.2f kg\n年龄:%d 岁\n\n", xiaoming.name, xiaoming.height, xiaoming.weight, xiaoming.age);

    return 0;
}

运行结果:

姓名:小明
身高:175.50 cm
体重:65.50 kg
年龄:25 岁

在示例6中,typedef其实也是同上期(C语言/const、#define和typedef)讲到的使用方法一样,只是将用户自定义的结构体作为了原类型为其取了一个别名“People”,这样就可以通过“People 结构变量”的方式声明结构变量了,其运行结果同示例5相同,也可以使用该方式声明多个结构变量。

扩展:typedef在结构体中的应用也常用于stm32外设模块初始化,例如我们熟悉的GPIO_InitTypeDef、USART_InitTypeDef、TIM_OCInitTypeDef等。

注:以上内容仅个人理解,不具备唯一性和绝对正确性,仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别卷了,累了就睡会吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值