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

本文主要说的是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->char->short:

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

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

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

对于热爱编程的人来说,有一群一起学习的小伙伴很重要!如果你感兴趣或者有需求的话,笔者有一个编程零基础入门学习交流俱乐部,还有学习视频文件,欢迎初学者和正在进阶中的小伙伴们!

三个数比大小c语言_C语言必学知识点【结构体】用法很多,坑也很多!相关推荐

  1. c语言三个数按大小排列怎么编程,C语言三个数排列大小的实现方法

    这个题简单,也有很多的方法,在这里我想用数学的方法解决排序问题.ps:本人是个学渣,程序写的不好,欢迎各位大神指点帮助. 梳理思路: 以1 2 3为例 先考虑我们所有的可能输入类型(这里不一一列举): ...

  2. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  3. C语言中三个数排列大小,C语言三个数排列大小的实现方法

    这个题简单,也有很多的方法,在这里我想用数学的方法解决排序问题.ps:本人是个学渣,程序写的不好,欢迎各位大神指点帮助. 梳理思路: 以1 2 3为例 先考虑我们所有的可能输入类型(这里不一一列举): ...

  4. C语言三个数比大小(if实例)

    C语言三个数比大小 代码如下: #include <stdio.h> int main() {int a,b,c;scanf("%d%d%d",&a,& ...

  5. c语言比较三个数大小输出最小值,比较ABC三个数的大小,从小到大排列输出。,c语言比较三个数大小按从大到小顺序输出...

    匿名网友: 思路分析:先比较2个数,取其中大者与第三个数比较得出较大者为最大数,记为max.步骤如下:第一步:输入a,b,c.第二步:比较a,b.若a>b,则执行第三步:否则,执行第四步.第三步 ...

  6. C语言三个数比较大小

    C语言三个数比较大小 1.常规算法进行比较 利用中间一个过渡变量进行判断,具体代码如下: #include <stdio.h> void main() {int x,y,z,tmp;pri ...

  7. 比较两个数或者三个数的大小,输出较大数的值 Java

    比较两个数或者三个数的大小,输出较大数的值 1.比较两个数的大小,输出较大数的值 代码如下: import java.util.Scanner; public class Compare {publi ...

  8. 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...

    英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...

  9. Python编程PTA——三个数比较大小的新解法

    Python编程PTA--三个数比较大小 **题目:**本题要求将输入的任意3个整数从小到大输出. 输入格式: 输入在一行中给出3个整数,其间以空格分隔. 输出格式: 在一行中将3个整数从小到大输出, ...

  10. 三个数比大小 输出最大值

    暴力 #include<bits/stdc++.h> using namespace std;int main( ) { // 三个数比大小int a,b,c;a = 5;b = 7;c ...

最新文章

  1. java 进度条 不更新_java 进度条不能刷新解决方案 (已更新一次)
  2. 我的世界最新版本生存服务器ip,我的世界服务器古风小阁IP|纯净生存(1.15.2)
  3. python核心编程——python对象
  4. 不是每个人都可以坚持!
  5. 【youcans 的 OpenCV 例程200篇】114. 形态学操作之膨胀
  6. truncate table语句和delete table语句的区别
  7. CSS3属性——(二)
  8. 盗梦空间http://acm.nyist.net/JudgeOnline/problem.php?pid=125
  9. android开源torrent解析,bt分析之bt种子制作(1)
  10. ZBrush、Maya和3dmax的区别?
  11. php 生成电话名片二维码
  12. 计算机网络对大学生负面影响案例,大学生网络成瘾问题的危害及影响
  13. element技巧之element的dialog弹出框可拖拽、可拉伸、可全屏并处理边界问题
  14. Azure云服务器搭建
  15. 追思“光纤之父”,物理学诺贝尔奖得主高锟自述
  16. 怎么关闭火狐浏览器的百度辅助模式(无障碍服务)
  17. css画心形原理,如何用 css 画一个心形
  18. java培训机构那个好点
  19. html win10虚拟键盘,Win10怎么调出虚拟键盘
  20. 文字下划线效果(标题hover效果)

热门文章

  1. 反驳《SEO的几大罪行》
  2. htc思想[second]
  3. Maven POM 浅析
  4. 线上多服务管理工具实例剖析
  5. Linux 高性能服务器编程——多进程编程
  6. NET开发资源站点和部分优秀.NET开源项目
  7. 利用TP-Link+花生壳建立属于自己的网站
  8. 对象释放函数kmem_cache_free核心函数slab_free的实现详解
  9. java 释放锁,在Java中以原子方式释放多个锁
  10. Android 四大组件学习之ContentProvider二