为什么要用结构体?

没有结构体之前,C语言中,数据的组织依靠:变量+数组。最初最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个就定义几个,后来有时候需要很多意义相关的变量这时候数组出现了。数组解决了需要很多类型相同,意义相关的变量问题,但是数组是有限制的,数组的不足在于,一个数组只能存储很多个数据类型相同的变量。所以碰到需要封装几个类型不同变量的时候,数组就无能为力。这时候就需要结构体。

注意:结构体定义在主函数外面

结构体定义的是一种新的组合类型(例如int double),而不是变量 ,也不消耗内存,可以看成一张造房子用的图纸

在定义变量的地方,用结构体类型定义变量,

#includestruct Student

{

char name[20]; //学生姓名

unsigned int num; //学号

int isMale; //性别

}; //注意这里的;不能丢

int main()

{

struct Student S1; //struct Student类型,变量名S1

//给结构体变量赋值

S1.name[0] = 'J';

S1.num = 123;

S1.isMale = i;

printf("S1.num = %d",S1.num);

return 0;

}

什么是结构体?

结构体是一个集合,里面包含许多元素,这些元素的数据类型可以相同,也可以不同。结构体是一种数据封装的方法,

结构体存在的意义就在于,把很多数据类型不相同的变量封装在一起,组成一个打的新的数据类型

数据结构:把庞大复杂的数据用一定的方式组织管理起来,便于操作(查找,增加,删除等)这就是数据结构。

结构体和数组的关联:数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同。结构体和数组一般都操作的是其中的子元素,一般不会做整体操作。

使用结构体的步奏:

1 定义结构体的类型。结构体类型的定义是在函数外面(函数外面 == 全局)的

2 定义结构体变量,使用第一步定义的类型来定义结构体变量

3 使用变量,实际上使用结构体变量的时候,使用的是结构体变量中封装的各个子元素,而不是结构体变量本身。

结构体初始化

结构体变量如果定义的时候无初始化,则结构体变量中的子元素的值是随机的,初始化时分号不好用

正确的初始化方式:

struct Mystruct s =

{

.a = 2, //一定是用逗号隔开不是分号

.b = 3, //一定是用逗号隔开不是分号

.c = 4, //一定是用逗号隔开不是分号

};

注意事项

1结构体类型的成员可以是另外一个结构体类型的成员

{

花括号里面的变量作用域名

}

2结构体类型某个成员是一个指向结构体类型的指针的话这个结构体类型只能是自己不是其他的(这是死规定)。

3只有声明变量时才会分配空间,创建类型相当于构建图纸并不是分配空间。

4如果有整型变量,那么struct 中的其他类型变量必须是4个字节:叫字对齐

5  内存空洞,浪费了其他字节时,改变方法:把相同类型的 变量放在一起,余下的空间不够在分配

6  半子对齐:结构体中只有 short int 按2个字节对齐, 有整型和短整型按整型对齐;

使用结构体存在的问题: 内存空洞  字对齐半字对齐

struct node struct node struct node

{char ch; { {

int num; int num; char ch;

}; //变量占8个字节 char ch1; int num;

char ch2; char ch1;

}; //变量占12个字节 char ch2;

}; //变量占12个字节

struct node

{char ch;

char ch1;

char ch2

}; 变量占3个字节

//int型变量占四个字节 字对齐

后一个变量若能在前一个变量分配的空间中存放下,则后一个变量不再重新分配空间。

此部分待续......

c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。相关推荐

  1. python list转换成树形结构_列表数据(包含父节点关系)转化为树形结构

    今天开发遇到一个需求,就是把包含父子关系的数据转化为树形结构,这个需求来自我开发的一个功能,前端需要使用 Element 的级联选择器实现行业级联选择的功能. 列表数据类型 每条数据都列出了其父 id ...

  2. impdp导入表结构和表数据_EXP COMPRESS以及EXP/IMP EXPDP/IMPDP导入表结构注意-阿里云开发者社区...

    EXP COMPRESS以及EXP/IMP EXPDP/IMPDP导入表结构注意 重庆八怪 2014-09-10 987浏览量 简介: 关于EXP COMPRESS参数 一直对这个参数有些疑惑.当然此 ...

  3. C语言int类型和float浮点型数据在内存中的存储方式

    int 类型在内存中占4个字节,而一个字节是8个比特位,所以int类型占32个比特位. float类型在内存中同样也占4个字节,所以其也是占32个比特位. 一个比特位就是一个0或1,所以其在二进制位数 ...

  4. 练习-编写函数对结构体类型数据进行排序

    第1关:编写函数对结构体类型数据进行排序 任务描述 本关任务:定义学生结构体数据类型,从键盘输入一批学生的信息,编写函数将这批学生按姓名排序. 相关知识 结构体变量之间整体是不可以比较大小的,结构体变 ...

  5. ORAN专题系列-17:5G O-RAN FrontHaul前传接口的网络配置管理与Yang数据建模语言

    前言: 程序=数据结构+算法,任何程序基本上都是解决这两个问题. 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储.组织数据元素的方式. 大多数的编程语言,如C, C++, J ...

  6. 使用Scala语言编写Spark应用程序实现数据去重

    使用Scala语言编写Spark应用程序实现数据去重 一.题目需求 二.建立目录结构 (一)创建 sparkapp4 文件夹并切换 (二)创建 data 文件夹(存放A.txt B.txt) (三)创 ...

  7. 专利:结构化大数据通信协议

    发明专利技术 结构化大数据通信协议 发明人:樊永正 269779216@qqqq.com 技术领域 结构化大数据通信协议是一种通信协议,也是一种让数据成为合格的结构化大数据的技术.结构化大数据通信协议 ...

  8. 数据操作语言DML及数据定义语言DDL的区别

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 数据操作 ...

  9. 使用Navicat 导出 MySQL 数据库表结构、表数据到Excel表格中

    文章目录 1 摘要 2 数据导出 2.1 导出数据库表结构至Excel 2.2 导出数据库表结构为 SQL 2.3 导出数据库表数据至Excel 3 推荐参考资料 1 摘要 在编写项目设计文档的时候, ...

最新文章

  1. 投了3遍都被毙的论文,终于中了
  2. Java数字包装类基本程序,Java基本数据类型包装类
  3. 机器学习和计算机视觉相关的数学
  4. codeforces 872 D. Something with XOR Queries(思维)
  5. 【NLP】如何清理文本数据?
  6. 重磅!全球Top 1000计算机科学家h指数公布:中国53位学者上榜!
  7. java跑批任务_【spring配置】——spring整合Quartz定时器
  8. Deep Learning(深度学习)网络资源
  9. SVM入门(十)将SVM用于多类分类
  10. java获取取得Timestamp类型的当前系统时间
  11. 在mdk使用swd最后一步无反应_STM32应用笔记: 使用STM32CubeMonitor实时监测变量
  12. 2ASK调制解调实验
  13. 傅里叶思想漫谈:从希尔伯特空间到不确定性原理
  14. box-sizing属性的content-box值和border-box值的区别
  15. 转《七年之前和七年之后》-祭奠高考
  16. 使用随机文件流类RandomAccessFile将一个文本文件倒置读出
  17. 如何学习verilog,如何快速入门?
  18. 蓝牙广播数据格式和动态改变
  19. Python语言零基础入门教程(一)
  20. 水滴筹-商业模式画布

热门文章

  1. 华清远见java考试题_Java面试题,你能答对几个?
  2. SpringCloud教程-分布式配置中心Config (SpringCloud版本Greenwich.SR4)
  3. win10微软账户登录后以管理员都无法修改hosts文件解决办法
  4. Scala可变集合:Queue增加和移除元素
  5. Docker将镜像上传至私有仓库
  6. volatile的实现细节
  7. Java并发编程--不要使用字符串常量作为synchronized锁对象
  8. Spring事务管理机制
  9. Highcharts JS去除Highcharts.com链接的方法
  10. mybatis实现增删改查xml配置和后端Java编程完整教程