上一章<一起学习C语言:函数> 中,我们了解了函数的声明形式和程序的编译过程,以及函数的递归调用和函数的指针调用。本章节,我们分析结构体。

章节预览:

结构体
1. 结构体的定义形式
2. 结构变量的定义形式
3. 结构变量初始化赋值
目录预览

章节内容:

结构体

实际编程中,一些函数采用数据按组传入使用,比如整形数组对象(512位成员)作为参数传入。如果一组数据中包含不同类型的数据时,数组已不再适用,我们需要考虑其它保存方式。首先,我们了解一组数据中包含不同类型的数据的例子:某地游泳馆举行100米自由泳比赛,选手李的成绩为55.26秒。这个例子中,姓名应为字符类型,成绩应为单浮点数类型。
  接下来,我们通过本章节内容了解结构体的定义形式和用法。

1. 结构体的定义形式

结构体与之前接触的类型不同,需要自定义类型名称和成员信息。

结构体定义形式

struct 名称 {
             成员1
             …
         };

结构体定义语句由关键字(struct)、结构名称、语句块和语句结束符(;)四部分组成,其中关键字、语句块和语句结束符不能省略。

结构体定义举例

struct swim {
             char name[64];
             float grade;
         };

上述示例定义名称为swim的结构体,语句块内有两位成员。第一个成员为字符类型数组对象name,第二个成员为单浮点数类型对象grade。

2. 结构变量的定义形式

结构变量可以通过多种形式定义,即可以根据结构名称定义结构变量,也可以在定义结构语句中指定结构变量,还可以直接定义结构变量。

接下来,分析结构变量的几种定义形式:

1. 根据结构名称定义结构变量:

struct swim {
              char name[64];
              float grade;
          };
          struct swim sw;

先定义结构语句,然后通过关键字加结构名称定义结构变量。

2. 定义结构语句中指定结构变量:

struct swim {
              char name[64];
              float grade;
          } sw;

定义结构语句的同时指定结构变量。

3. 隐式定义结构语句中指定结构变量:

struct {
              char name[64];
              float grade;
          } sw;

隐式属于泛指含义,在这里表示定义结构语句中不指定结构名称,即定义结构语句外无法通过结构名称定义结构变量。这种形式一般较少使用,作为了解即可。

3. 结构变量初始化赋值

结构变量初始化赋值方式与数组变量相似,都是在大括号内为成员赋值。

结构变量初始化赋值:
          struct swim {
              char name[64];
              float grade;
          }sw = {NULL, 0.0};
          struct swim swi = {NULL}; //sw与swi初始化效果相同

结构变量初始化只为第一个成员赋值时,其余的成员自动赋值为0。在结构体中又存在结构类型成员或数组类型成员时,可以采用二维数组方式赋值:

struct swim {
              char name[64];
              int circle[64];
              float grade;
              char* name1;
          }sw = {{NULL}, {1, 2, 3}};

结构变量sw初始化完成后,结构变量成员name为0、0…0,circle为1、2、3、0…0,grade为0.0,name1为NULL。

总体来说,结构变量与数组变量在初始化赋值方面较为相似,但类型构造方面存在一些差异。结构变量的地址是结构内存的首地址,也是第一个结构变量成员的地址,结构变量中储存的值是结构变量成员;而数组变量地址和数组变量储存的值都是数组内存的首地址。

目录预览

<一起学习C语言:C语言发展历程以及定制学习计划>
<一起学习C语言:初步进入编程世界(一)>
<一起学习C语言:初步进入编程世界(二)>
<一起学习C语言:初步进入编程世界(三)>
<一起学习C语言:C语言数据类型(一)>
<一起学习C语言:C语言数据类型(二)>
<一起学习C语言:C语言数据类型(三)>
<一起学习C语言:C语言基本语法(一)>
<一起学习C语言:C语言基本语法(二)>
<一起学习C语言:C语言基本语法(三)>
<一起学习C语言:C语言基本语法(四)>
<一起学习C语言:C语言基本语法(五)>
<一起学习C语言:C语言循环结构(一)>
<一起学习C语言:C语言循环结构(二)>
<一起学习C语言:C语言循环结构(三)>
<一起学习C语言:数组(一)>
<一起学习C语言:数组(二)>
<一起学习C语言:数组(三)>
<一起学习C语言:初谈指针(一)>
<一起学习C语言:初谈指针(二)>
<一起学习C语言:初谈指针(三)>
<一起学习C语言:函数(一)>
<一起学习C语言:函数(二)>
<一起学习C语言:函数(三)>
<一起学习C语言:函数(四)>

一起学习C语言:结构体(一)相关推荐

  1. c语言2个字符串可以相互赋值吗,c语言结构体2之变量赋值于字符串

    #include #include struct dangdang { char email[]; char name[]; char addr[]; int num; int bugnum; cha ...

  2. C语言连接结构体,C语言结构体嵌套

    本篇文章帮大家学习c语言结构体嵌套,包含了C语言结构体嵌套使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. C语言中的嵌套结构体表示在一个结构体中可以使用另一个结构作为成员 ...

  3. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  4. C 语言结构体引用,引用 C 语言结构体学习

    引用 C 语言结构体学习 这篇文章很基础,是个学习的好资料,所以收藏了: 1.直接声明结构体变量: struct{ int length; int width; }box1; 这样就声明了一个名为bo ...

  5. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  6. C语言学习笔记(15)——结构体程序设计

    前言 C语言的基本数据类型有整数型.实数型及字符型,使用这些基本数据类型可以构造数组类型,并且可以定义相关数据类型的指针.本节介绍的结构体类型区别于以上任何数据类型,它还能把各种不同类型的数据组合成一 ...

  7. linux中c语言结构体详解,Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  8. python展开 c函数中的宏预处理_Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  9. c语言 结构体_颖儿教你学C语言结构体,全面讲解,让程序小白玩转结构体编程...

    C语言结构体详细教学开始 前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号 ...

  10. C语言结构体(Struct)

    C语言结构体(Struct) 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种集合,它里 ...

最新文章

  1. 设计模式(9)-责任链模式详解(易懂)
  2. php foreach next,foreach next 操作数组指针移动问题,多个数连加,连除,连减,连乘php版本...
  3. windows 下anaconda创建环境慢的解决办法
  4. 三十一、电子商务分析与服务推荐
  5. Flex 3 与 Flex 4 beta 之间的区别
  6. 【简便代码】1064 朋友数 (20分)_25行代码AC
  7. XSL学习笔记6 XSLT内置模板规则
  8. GitHub 支持上传视频文件啦!
  9. c++远征之模板篇——友元函数、友元类
  10. spring aop实现原理_Spring 异步实现原理与实战分享
  11. 关于跨dll的模板单例问题
  12. Qt工作笔记-QGraphicsProxyWidget放自定义界面实现拖动
  13. StringBuffer 和 StringBuilder 的 3 个区别
  14. 00-自测3. 数组元素循环右移问题
  15. 在线JSON在线对比差异工具
  16. IPv6规模部署及专项督查工作全国电视电话会议
  17. 华为太极magisk安装教程_【极客教程】如何让不支持指纹支付的手机也能用上指纹支付?...
  18. 03-什么是Mach-O文件?
  19. Hadoop与MPP
  20. symbian3 java游戏测试,Symbian^3愤怒的小鸟测试版C7首发实测

热门文章

  1. 新公司要上监控,我决定用Prometheus
  2. 云计算监控—Prometheus监控系统(文末赠书)
  3. 【技术文档】jeecg3.7-maven搭建环境入门 - 老版本
  4. 【开发技巧】解决微信author2.0回调内网本地问题
  5. freemarker 对null 的处理
  6. 基于递归算法,树形结构数据下业务场景,封装解决方法
  7. MySQL数据库和Oracle数据库的区别
  8. 如果正确看待区块链这一新型技术的未来发展?...
  9. 廖雪峰JS教程--条件判断
  10. 定时执行vacuum