C语言可谓是编程界的传奇语言,历经几十年,依然排名前列。

前不久还写了一篇文章《2019年11月C语言接近Java》,说了C语言是比较受欢迎的一种语言,有望在年底超过JAVA,再次成为第一名。

猛兽大开发:TIOBE 11月编程语言排行榜:前十为什么又变了​zhuanlan.zhihu.com

本文主要说的是C语言中的结构体,结构体是C语言中重要的一部分内容,也是C语言中常用的一种数据结构。

一、关于结构体

在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。

结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

结构体的定义如下所示:

其中:

struct为结构体关键字;

tag为结构体的标志;

member-list为结构体成员列表,其必须列出其所有成员;

variable-list为此结构体声明的变量。

在一般情况下:tag、member-list、variable-list这3部分至少要出现2个。

二、结构体常规定义

不同的定义,应用在不同场景,所以,我们编程时需要结合实际情况来定义结构体。

方法1:

定义结构体stu,此时结构体相当于一个类型,比如int,如需使用此结构体,方法同int.

方法2:

定义结构体stu同时定义需要使用的结构体变量stu1, stu2。如后面再需要定义结构体变量,方法同1.

方法3:

定义结构体时,结构体名称缺省,同时定义结构体变量stu1,stu2。但后面不可再定义结构体变量。

提示:

这里不能像上面再定义结构体变量:(以下错误)

三、使用typedef定义结构体

这里先简单说下typedef.

在C和C++编程语言中,typedef是一个关键字。它用来对一个数据类型取一个别名,目的是为了使源代码更易于阅读和理解。它通常用于简化声明复杂的类型组成的结构 ,但它也常常在各种长度的整数数据类型中看到,例如size_t和time_t。

维基百科

方法4:

使用typedef定义结构体同时,给stu结构体别名STU,后续定义可不用使用struct stu,直接使用STU即可。

你会发现,其实就是通过关键字typedef,将STU取代了struct stu。

当然,也可以这么用:

上面这种定义就失去了typedef的意思,所以不推荐。

方法5:

使用typedef定义结构体时,省掉结构体第一个别名stu,直接在后面加STU,使用方法同上。

方法6:

还有一种符合语法规则,但意义不大的定义方式。

以上这些定义方式算是语法的知识,如果还不懂,请再次复习一下。

四、结构体大小计算

结构体的大小,我相信很多人都没搞明白。实际编程中也是很多地方都在应用,比如:存储、拷贝结构体时都会牵涉到结构体大小的问题。

1.对比两结构体大小,一样吗?

结构体1:

结构体2:

答案是不一样。程序测试得出sizeof(stu1)=6, sizeof(stu2)=4.

2.分析不一样原因

结构体计算要遵循字节对齐原则,一般满足三个准则:

1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;

3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节;

对于上面结构体stu1来说,最大字节:2字节,顺序是 char->short->char:

对于上面结构体stu2来说,最大字节:2字节,顺序是 char->short->char:

通过上面两个表格,相信你应该明白了,改成4字节的int,原理一样。

最后,强调一下,学习编程,不能只看书,要多敲代码。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

语言取10的整数倍_C语言结构体用法很多,坑也很多相关推荐

  1. 语言取10的整数倍_C语言面试题(一)

    哈喽,前几篇文章将C语言基础 简单的写了写,不知道大家能不能理解哈,今天更新下C语言的一些常见面试题,希望能帮助到大家. 1.描述⼀下gcc的编译过程? gcc编译过程分为4个阶段:预处理.编译.汇编 ...

  2. 机械优化黄金分割法c语言编程,黄金分割法_机械优化设计_C语言程序.doc

    黄金分割法_机械优化设计_C语言程序黄金分割法_机械优化设计_C语言程序 黄金分割法的优化设计 实验报告 学院:机电工程 机制自动化11-03班 学号:541102010326 姓名:刘点点 1,黄金 ...

  3. c语言程序设计阶乘输出,C语言编写10的阶乘,用C语言编程求10的阶乘

    导航:网站首页 > C语言编写10的阶乘,用C语言编程求10的阶乘 C语言编写10的阶乘,用C语言编程求10的阶乘 匿名网友: 思路:先定义一个函数求一个数的阶乘,接着依次从1到10调用该函数就 ...

  4. c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明

    c语言中浮点数和整数转换 C中的数据类型 (Data Types in C) There are several different ways to store data in C, and they ...

  5. c语言分离个位十位百位_C语言中 将一个3位数整数,正确分离出它的个位、十位和百位数字,并分别在屏幕上输出...

    展开全部 代码如下: #include int main(void) { int number;int units, tens, hundreds; //定义三个变量分别存储个位.十位和百位上的数字 ...

  6. c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...

    点击上方"C语言中文社区",选择"设为星标★" 技术干货第一时间送达! 往期回顾: C语言实例第01期,十进制数转换二进制数 C语言实例第02期,判断某一年是否 ...

  7. c语言输入10个整数 求偶数个数6,任意输入10个整数,输出其中的偶数,和偶数的个数...

    任意输入10个整数,输出其中的偶数,和偶数的个数 一 . 运用java代码如下: package bean; import java.util.Scanner; public class b { pu ...

  8. c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...

    点击上方"大鱼机器人",选择"置顶/星标公众号"福利干货,第一时间送达!指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机 ...

  9. 易语言取linux命令返回值,易语言取程序返回值写法

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:易语言取程序返回值写法回答:在易语言中,程序包括"处理程序"都有六部分组成.一.程序名,就是程序的名称,程序名不 ...

最新文章

  1. postman 接口测试工具介绍
  2. 新工科教育的实践与思考——曾勇校长在工程教育高峰论坛上的报告
  3. html 移动端关于长按图片弹出保存问题
  4. JAVA中的线程安全与非线程安全,java面试题,java高级笔试题
  5. 给你自己的博客加个 Markdown
  6. LeetCode_88、合并两个数组(python)
  7. 测试日照强度的软件,日照分析软件FastSUN - 飞时达软件
  8. 布朗运动、伊藤引理、BS公式
  9. python 移动平均线_使用python计算简单移动平均线
  10. Ice_cream's world I( 并查集 + 判环 )
  11. 百万级数据量,千万级数据量是多少,海量数据的优化方案
  12. 服务器不能复制粘贴文件的处理方式
  13. win10系统如何将鼠标从主屏幕上侧切换到外接屏幕
  14. DVWA-SQL Injection级别通关详解
  15. 如何让android的service一直在后台运行
  16. 数商云采购系统对账结算功能介绍 | 缩短汽配企业结算周期,提高资金周转效率
  17. 向量中断、中断向量、向量地址3个概念是什么关系?
  18. 基因工程-3-基因工程载体
  19. 建模教程_Zbrush沼泽猎人角色制作教程
  20. 试论软件的可靠性及其保证

热门文章

  1. LinkedIn:用数据提高视频性能
  2. 编写可靠 bash 脚本的一些技巧
  3. 当一个美术生开始在腾讯撸代码… |「递归」第1集
  4. linux之autoconf/automake
  5. Linux下 /dev/null 21 相关知识说明
  6. Springboot微服务开发教程系列:开发入门
  7. 从vivo 大规模特征存储实践中学点经验
  8. 面试题SMKJ——no.1
  9. 从 ES 到 Kylin,斗鱼客户端性能分析平台进化之旅
  10. leetcode 662. Maximum Width of Binary Tree | 662. 二叉树最大宽度(BFS)