0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

结构体成员变量的引用方法123

冬至子 来源:小李的创客实验室 作者:初出茅庐的小李 2023-07-08 14:45 次阅读

第一种方式“.”引用

第一步:先定义一个结构体

#pragma pack(1) /*1字节对齐*/
typedef struct 
{
  char xuehao[20];      //学号
  char xingming[20];    //姓名
  float fenshu;         //分数
  int age;              //年龄
}student_t;
#pragma pack()/*还原默认对齐*/

这里采用的是常用的typedef关键字进行定义结构体类型,可以看到student_t这种数据类型里面有4个成员变量,分别是学号、姓名、分数、年龄,这些成员变量既然是变量就应该满足变量的基本特征,也就是说可以被赋值,可以被引用,下面直接看代码

student_t  stu1, stu2;  //此时stu1,stu2为student_t结构体类型的变量
  
  strcpy(stu1.xingming, "初出茅庐的小李");//数组变量赋值字符串操作
  strcpy(stu1.xuehao, "10086");          //数组变量赋值字符串操作
  stu1.fenshu = 99.0;                    //浮点数赋值操作
  stu1.age = 10;                         //整形数赋值操作


  strcpy(stu2.xingming, "张三");
  strcpy(stu2.xuehao, "10010");
  stu2.fenshu = 89.5;
  stu2.age = 12;
  //左滑可以查看全部

这里可以看到stu1结构体和stu2结构体的4个成员分别被引用了 引用的格式是:结构体变量名.结构体成员名

第二步:打印观察赋值效果

代码如下:

printf("\\r\\n\\r\\n**********小李的创客实验室**********\\r\\n\\r\\n");
  printf("====================================\\r\\n");
  printf("stu1的姓名是:%s\\r\\n", stu1.xingming);
  printf("stu1的学号是:%s\\r\\n", stu1.xuehao);
  printf("stu1的年龄是:%d\\r\\n", stu1.age);
  printf("stu1的分数是:%f\\r\\n", stu1.fenshu);
  printf("====================================\\r\\n");
  printf("stu2的姓名是:%s\\r\\n", stu2.xingming);
  printf("stu2的学号是:%s\\r\\n", stu2.xuehao);
  printf("stu2的年龄是:%d\\r\\n", stu2.age);
  printf("stu2的分数是:%f\\r\\n", stu2.fenshu);
  printf("====================================\\r\\n");
  //左滑可以查看全部

输出结果如下:

图片

第二种方式“->”引用

下面来看第二种常用的引用方法,这种方法经常用做结构体传参的场合,很多参数需要传递的时候,比如在STM32配置串口波特率、停止位、数据位、校验位、这些参数的时候就会应用到,比较方便只需要一个结构体指针变量就可以访问结构体的各个成员变量,下面直接来看实例

代码如下:

void printf_stu(student_t *stu) 
{
  printf("stu的姓名是:%s\\r\\n", stu- >xingming);
  printf("stu的学号是:%s\\r\\n", stu- >xuehao);
  printf("stu的年龄是:%d\\r\\n", stu- >age);
  printf("stu的分数是:%f\\r\\n", stu- >fenshu);
}
//左滑可以查看全部

这是一个自定义的打印函数,参数是student_t类型的指针,也就是结构体变量的一个地址,调用如下

printf("====================================\\r\\n");
    printf_stu(&stu1);
    printf("====================================\\r\\n");
    printf_stu(&stu2);
//左滑可以查看全部

观察实验现象

图片

可以看出,通过传入函数不同的参数,就可以得到不同的输出这在很多配置参数的场合就显得非常重要

举例说明:

图片

配置C端口参数就是传入这样一个结构体变量的地址

第三种方式引用

其实这种方式我感觉不常用,但是有助于理解指针变量的真实含义就是指针变量取内容的操作,取内容取地址是跟指针紧密相关的知识点这里简单说一下,以后有时间我们再来详细探讨这里面的细节。

void printf_stu(student_t *stu) 
{
  printf("stu的姓名是:%s\\r\\n", stu- >xingming);
  printf("stu的学号是:%s\\r\\n", stu- >xuehao);
  printf("stu的年龄是:%d\\r\\n", stu- >age);
  printf("stu的分数是:%f\\r\\n", stu- >fenshu);
}
printf_stu(&stu1);
void printf_stu2(student_t *stu) 
{
  printf("stu的姓名是:%s\\r\\n", (*stu).xingming);
  printf("stu的学号是:%s\\r\\n", (*stu).xuehao);
  printf("stu的年龄是:%d\\r\\n", (*stu).age);
  printf("stu的分数是:%f\\r\\n", (*stu).fenshu);
}


//左滑可以查看全部

图片

通过以上对比实验大家可以发现,其实两种写法输出效果是一样的,这就说明了取内容取地址是互逆的操作。

总结:不管那一种引用方式都是为了应用、各种方式都有自己的特点,根据应用场景灵活运用才是正道,至于第二种和第三种的区别我个人感觉不大,其实我用的最多的还是第一种哈~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10890

    浏览量

    355632
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136614
收藏 人收藏

    评论

    相关推荐

    用C语言的结构实现字节、位操作

    。那么这个应用例将向您介绍一些SPMC75F2413A普遍使用的编程方法。使用结构、联合定义位段实现位和字节的操作。1.2 基本概念结构结构是用同一个名字
    发表于 09-21 09:25

    C语言结构(struct)常见使用方法

    定义其他同结构变量了——至少我现在没掌握这种方法结构
    发表于 08-23 18:18

    ccs程序在结构后面打上点(.)后结构成员不出现

    在编译器中定义的结构,在结构后面打上点(.)后,结构
    发表于 09-29 15:05

    Keil5里结构变量成员名自动补全功能不能用了

    Keil5里结构变量成员名自动补全功能不能用了,结构后按。没有成员名自动出现的功能了,不知道
    发表于 10-18 08:53

    漫谈C语言结构

    ,若发现不足之处恳请指出。代码文件test.c我放在下面。(2)以修改结构成员变量方法代替了函数(入口参数)的重新定义。  如果说
    发表于 11-15 15:59

    【干货】c语言基础语法——结构

    输入和输出;在输入输出结构数据时,必须分别指明结构变量的各成员;-总结;除开“相同类型的
    发表于 06-03 17:10

    如何利用C语言取结构成员变量的地址?

    C语言,如何取结构成员变量的地址?发个列程好吗?我好研究一下
    发表于 11-04 03:31

    C语言结构的区别

    结构在使用其某成员变量时用:结构名.结构
    发表于 03-24 03:27

    结构变量的定义与使用变量访问结构成员

    知识点回顾关于找最大公共子串的两种解题方法结构的定义(3种)结构变量的定义与使用
    发表于 12-17 07:10

    测试结构成员内存对齐的方式方法

    //测试环境:keil for ARM//测试目的:通过keil仿真,介绍结构成员对齐方式 #pragma pack ()//定义一个联合体类型 struct stru {int a;long b
    发表于 12-21 07:37

    简单分析linux内核中的结构使用方法

    结构的使用并不熟练,导致在linux开发中一头雾水。下面简单分析结构的使用方法。1:结构
    发表于 01-19 08:26

    C语言中的结构指针在访问的时候怎么读取成员变量的数据?

    C语言中的结构指针在访问的时候怎么读取成员变量的数据
    发表于 10-10 07:07

    求助,结构变量定义引用问题求解

    |= mask; } 如以上语句,GPIO_Type是个结构定义,定义了一个*base变量,在引用其中的成员时,是base->I
    发表于 10-27 06:06

    C语言如何定义结构类型变量

    在定义了结构变量后,系统会为之分配内存单元。根据结构类型中包含的成员情况,在Visual C
    的头像 发表于 03-10 15:35 1280次阅读

    结构成员变量引用方法

    这里默认大家是了解结构这种数据类型的,如果不了解可以参考往期相关文章,好了下面开始这次的内容分享
    发表于 06-23 17:52 4986次阅读
    <b class='flag-5'>结构</b><b class='flag-5'>体</b><b class='flag-5'>成员</b><b class='flag-5'>变量</b>的<b class='flag-5'>引用</b><b class='flag-5'>方法</b>