【C语言更新】结构体的定义及使用

文/Edward
首先先思考一个问题,假设某一天你去了一家策划公司,接到了一个策划需求,比如为新上市的某款手机写一个市场推广的文案,并且在电脑上面打印出来。那么在写这个文案的时候,你肯定是会需要着重地去介绍这款手机的一些信息的,比如:手机品牌:pear,型号:13mini,机身长度:150.9mm,机身宽度:75.7mm,机身厚度:8.3mm,屏幕尺寸6.1英寸,定价5899.00等等这系列信息。要实现这一个程序非常简单,只需要去将这些变量定义好,定义完成之后再去打印在电脑屏幕上即可,如图1所示。
图1 定义变量去描述手机参数
这个程序非常简单就能实现了,也非常顺利就可以打印出手机主要的介绍信息。那么第二个问题来了,假设这家公司现在也学会了营销,一次发布会会发布多款手机,这些手机分别被命名为13mini,13,13Max,13 MaxPlus,并且在一张海报上将这些手机所有维度的参数信息打印出来,就如图1一样,那么此时该如何处理呢?
最简单的办法就是分别给每个手机的手机品牌,型号,机身长度,机身宽度,机身厚度,屏幕尺寸,定价等等这系列信息定义一个变量,如型号这个信息,Pear 13可以定义为Pear13_model,Pear13 mini可以定义为Pear13Mini_model,以此类推。试想一下,每个手机我们所展现出来的信息有7个,那么4个配置的手机一共要定义28个不同的变量。这么多的变量对于程序设计来说是不友好的,因为太多的独立的变量会让程序看上去非常杂乱,甚至编程者自己到最后都搞不清楚这些变量的意思了。
我们再仔细观察这些变量,其实每一个手机的变量都是固定的,就是手机品牌,型号,机身长度,机身宽度,机身厚度,屏幕尺寸,定价这七个维度的信息。那么我们是否可以将这七个信息组合成一个集合,每次增加描述新手机变量的时候,我们只需要增加一个集合,就可以同时将这七个维度的信息全都描述出来?
这种想法显然是合理的,在C语言中,这种由多个基本变量组成的集合式的复合变量叫做结构体。当然这个定义还需要再补充一点,一个结构体也可以包含另一个结构体。
结构体在C语言中使用关键词“struct“进行定义,其定义方式有两种。
第一种方式是在定义结构体类型的时候同时定义结构体变量,其形式为:
struct 结构体标签
{
数据类型 成员变量名;
数据类型 成员变量名
……
} 结构体变量名;
第二种方式是先定义结构体类型,再定义结构体变量,其形式为:
struct
struct 结构体标签
{
数据类型 成员变量名;
数据类型 成员变量名
……
};//定义结构体类型
struct 结构体标签 结构体变量1, 结构体变量2……;
当使用第一种方式时,结构体标签可以省略。
很多读者在第一次接触结构体的时候,可能经常会搞不明白这里的结构体标签,结构体变量名,结构体成员之间是什么关系。我们可以举一个很形象的例子来解释一下。人的思维具有一个很强大的功能,这就是概括性或者说是归一性,表现出一点就是每个人都非常善于找规律从而对一些客观事物的特点进行总结。比如当你描述小丽外表的时候,你会说“她有着大大的眼睛,乌溜溜的眼珠,亚麻色的长发,月光般白皙的皮肤,高挺的鼻梁,樱桃小嘴“等,其实你以这种方式描述的时候,就已经将一个人眼睛,眼珠,头发,皮肤,鼻梁,嘴巴等几个方面的信息抽象出来了,而每个人都有这些信息,这里的这些信息在结构体中就相当于它的成员变量。而这些信息都是包含在”人“这个标签中的,因此”人“这个标签就类似于结构体中的结构体标签。最后你描述的对象小丽,在这里就类似于具体的结构体变量名,当然你可以用同样的信息去描述另一个人,比如小月。
言归正传,如何用结构体变量来实现上述手机信息的描述呢?首先,我们先定义一个结构体标签,接着用这个标签去定义四个具体手机的描述信息。这个结构体标签里面应该包含手机品牌,型号,机身长度,机身宽度,机身厚度,屏幕尺寸,定价这七个成员变量。
这个结构体标签可以写成:
struct Mobilephone{char *brand;char *model;float length;float width;float thickness;float screen_size;float price ;};
接着,使用这个结构体标签分别去定义4个具体手机的描述信息,即定义四个结构体变量。
Mobilephone Pear13MiniInfo, Pear13Info, Pear13MaxInfo,Pear13MaxPlusInfo;
这些结构体变量定义好了之后,我们就可以像使用普通变量一样去使用他们了。使用的时候使用小数点“.“去获取每个结构体变量中的成员变量,如要对Pear13MiniInfo中的brand变量赋值时,只需要使用Pear13MiniInfo. brand=”Pear”即可。因此上述的程序可以写成如图2所示。
图2 结构体变量的使用
(0)

相关推荐

  • 随机输出字符串的文字

    // 随机输出字符串的文字.cpp : 定义控制台应用程序的入口点.//// 飞机大战(敌机放子弹).cpp : 定义控制台应用程序的入口点.//#include "stdafx.h&quo ...

  • c语言结构体中的冒号的用法

    结构体中常见的冒号的用法是表示位域. 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可.为了节省存储空间,并使处理 ...

  • c语言中结构体成员变量使用“.”符号赋值方法

    在C语言中定义结构体类型的变量时,其内部的成员变量赋值除常规的方法外,也可以通过点号"."进行赋值,如下图所示: 备注:在Linux系统上使用gcc / g++编译器调试通过,其它 ...

  • 【C语言】结构体占用字节数及存储与空间分配

    我们都知道在数据类型中,char类型占1个字节,short占2个字节,int占4个字节,long占8个字节等等. 在计算结构体大小时需要考虑其内存布局,结构体在内存中存放是按单元存放的,每个单元多大取 ...

  • 嵌入式C语言之结构体对齐详解

    引言 https://m.toutiao.com/is/JctcUfB/ 结构体作为日常开发中使用最广泛的数据类型之一,其重要性不言而喻 .上一篇我们介绍了结构体的定义, 变量的初始化, 以及结构体元 ...

  • 嵌入式C语言之——结构体对齐详解

    嵌入式C语言之--结构体对齐详解 原创嵌入式笔记v2020-04-06 23:02:22 引言 结构体作为日常开发中使用最广泛的数据类型之一,其重要性不言而喻 .上一篇我们介绍了结构体的定义, 变量的 ...

  • C语言之结构体就这样被攻克了!

    「本文目录」 结构体的声明与定义 声明 定义 访问结构体成员 初始化结构体 对齐 结构体嵌套 结构体数组 结构体指针 传递结构体信息 传递结构体变量 传递指向结构体变量的指针 动态申请结构体 实战:建 ...

  • C语言之结构体就这样被攻克了!(绝对值得收藏的文章)

    来源 :公众号"TechZone",作者:HarrisWilde 「本文目录」 结构体的声明与定义 声明 定义 访问结构体成员 初始化结构体 对齐 结构体嵌套 结构体数组 结构体指 ...

  • 【C语言资料更新】第六十一集 结构体存储和用typedef定义结构体存储类型

    文 / Edward 结构体内部成员变量存储 前一小节,我们通过一个简单的例子来学习了结构体的定义和使用.事实上,结构体相当于是把一系列存在某种内在逻辑关系的变量成员包含在一个特定的群组中,从而实现便 ...

  • 【C语言资料更新】结构体的“卫浴”(位域)

    文/Edward 接下来再回到我们结构体的话题中来,我们之前讲结构体的时候,都是用int,char之类的数据类型来定义结构体的成员变量的,这些成员变量都有一个共性,就是他们的长度都是一个字节,或者一个 ...

  • 【C语言更新】结构体中实现函数成员以及回调函数

    文/Edward 前面说,结构体内部的成员变量可以是普通变量,数组,除了这些变量之外,还可以是指针,结构体,枚举,共用体等.综上所述的结构体内部成员中,我们可以发现一个结构体内部的成员竟然不包含函数. ...