【C语言进阶】加入口试怎能不会布局体?进来学,手把手教会你布局体的原理与利用

[复制链接]
发表于 2026-2-1 18:29:57 | 显示全部楼层 |阅读模式
目次
前言:
正文:布局体:
         1.布局概述:
         2.布局的声明:
         3.特别声明:
         4.布局的自引用:
         5.布局的界说与初始化:
         6.布局体内存对齐(超重点★★★★★):
         7.修改默认对齐数:
         8.布局体传参:
总结:


   ️博客主页:✈️积极学习的銮同砚
  ️接待关注:点赞收藏✍️留言
  ️系列专栏:【进阶】C语言学习
          家人们更新不易,你们的点赞和关注真的对我真告急,各位途经的友友贫苦多多点赞关注,接待你们的私信提问,感谢你们的转发!
          关注我,关注我,关注我,你们将会看到更多的优质内容!!!
  <hr>  本文重点
  布局体声明布局体自引用布局体界说
  布局体初始化布局体内存对齐布局体传参
  前言:

         上文中我详细全面的为各位小同伴们整理出了在口试中常用的字符串除了函数,而且为各人讲授了每个字符串处置惩罚函数的语法布局和利用方法。而在我们的二面笔试中,尚有一个非常告急常考的知识块,那就是我们本日的讲授内容——布局体
正文:布局体:

        1.布局概述:

         C 语言允许用户自己指定如许一种数据布局,它由差异范例的数据组合成一个团体,以便引用,这些组合在一个团体中的数据是相互接洽的,如许的数据布局称为布局体,它相称于别的高级语言中记录。布局是一些值的聚集,这些值称为成员变量。布局的每个成员可以是差异范例的变量
        2.布局的声明:

         这部门内容在前面初阶布局体已经讲过了,不再做过多的赘述,在此仅以形貌 “ 弟子 ”为例演示其声明与界说的过程
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include<stdio.h>
  3. //结构体的声明:
  4. struct student
  5. {
  6.         char name[20];
  7.         int age;
  8.         char sex[5];
  9.         float score;
  10. }s1,s2;
  11. //定义结构体变量s1、s2
  12. //此处定义的结构体变量是全局的
  13. struct student s3, s4;
  14. //定义结构体变量s3、s4
  15. //此处定义的结构体变量等同于声明时定义,也是全局的
  16. int main()
  17. {
  18.         struct student s5, s6;
  19.         //定义结构体变量s5、s6
  20.         //此处定义的结构体变量是局部的
  21.         return 0;
  22. }
复制代码
        3.特别声明:

         本日我们关于声明部门要增补的,是关于布局体的不完全声明,即匿名布局体范例
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include<stdio.h>
  3. struct
  4. //没有声明结构体标签,即为匿名结构体类型
  5. {
  6.         char name[20];
  7.         int age;
  8.         char sex[5];
  9.         float score;
  10. }student = { "Zhang",21,"Man",91.7 };
  11. //匿名结构体类型必须在生声明的同时进行定义
  12. int main()
  13. {
  14.         printf("%s %d %s %.1f\n", student.name, student.age, student.sex, student.score);
  15.         return 0;
  16. }
复制代码
        我们把这种在声明时省略掉布局体标签的布局体称为匿名布局体范例,在利用这种方式举行声明时,由于没有声明布局体标签,导致一旦该布局体竣事声明,将无法再次举行界说,以是对于该范例的布局体来说,就必须在声明布局体的同时举行界说(可以不初始化)。
         之以是在这里夸大这个知识点是由于,在举行完全声明时,比方上面我们的 “ 弟子 ”的示例中的s1~s6这六个布局体变量由于声明时声明告终构体标签,以是会被视为同一种范例举行处置惩罚和调用
         而我们再来看下面这个例子:
  1. //结构体类型1:
  2. struct
  3. {
  4.         char name[20];
  5.         int age;
  6.         char sex[5];
  7.         float score;
  8. }x;
  9. //结构体类型2:
  10. struct
  11. {
  12.         char name[20];
  13.         int age;
  14.         char sex[5];
  15.         float score;
  16. }*p;
复制代码
        在这个示例中,固然两个布局体范例内的布局体成员完全一样,但由于两者都利用了匿名布局体的声明方式,编译器会把上面的两个声明当成完全差异的两个范例,于是在下面的代码中将被视为非法:
  1. p = &x;
  2. //一种类型的指针指向另一种不同类型,将被视为非法
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表