结构体

1.结构体简介

之前我们学过基础的几种数据类型但是大多情况下我们需要把多个信息联系到一起,那么结构体正是用来解决这个问题,它可以有效的定义一个变量来包含多个信息。

2.结构体使用

#include <stdio.h>
int main(){
    //定义结构体stu包含以下变量
    struct stu{
        char *name;  //姓名
        int num;  //学号
        int age;  //年龄
        char group;  //所在小组
        float score;  //成绩
    } ;
    struct stu stu1;//定义一个结构体变量
    //给结构体成员赋值
    stu1.name = "yang";
    stu1.num = 15;
    stu1.age = 20;
    stu1.group = 'c';
    stu1.score = 120;
    //打印结构体成员的值
    printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);
    return 0;
}
//运行结果:yang的学号是15,年龄是20,在c组,今年的成绩是120.0!

3.结构体的大小与对齐方式

之前我们了解过单个变量所占内存情况,猜想以下这个结构体占多少字节内存
#include <stdio.h>
int main(){
    struct stu{
        
	    char group;  //所在小组
        int num;  //学号
        int age;  //年龄
		char name;  //姓名
    
    } ;
   struct stu stu1;
    //读取结构体成员的值
    printf("结构体所占内存%d字节",   sizeof(stu1));
    return 0;
}
运行结果为结构体所占内存16字节
//按照之前所说应该是10才对为什么会是16呢

接下来我们就要说下结构体对齐的问题,这是工作中常见的毕竟单片机的资源较少能节约便节约点。
结构体对齐数 为编译器默认的一个对齐数。每个特定平台上编译器都有自己的默认的对齐系数,一般32位平台默认四字节对齐,64位平台默认为八字节对齐。
所以内存中这个结构体group和name都被当做4个字节来处理。

    struct stu{
        
	    char group;  //所在小组
	    char name;  //姓名
        int num;  //学号
        int age;  //年
    } ;

而这样定义则占12个字节,因为前两个大小为2字节,系统默认补齐4字节结果就是4+4+4=12

那有没有让结构体根据实际所需来对齐呢?
#pragma pack ()出现了通过预处理()填几便是几字节对齐

#include <stdio.h>
int main(){
	#pragma pack (1)
    struct stu{
        
	    char group;  //所在小组
        int num;  //学号
        int age;  //年龄
		char name;  //姓名
    
    } ;
   struct stu stu1;
    //读取结构体成员的值
    printf("结构体所占内存%d字节",   sizeof(stu1));
    return 0;
}
//这样便是一字节对齐结果就是10

4.总结结构体

结构体的定义,使用很简单,但是结构体对齐一定常记心中。结构体指针会放到指针的文章里讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值