文章目录
一、结构体的概念
前面的教程中我们讲解了变量和数组(array),变量是一个一个定义的,数组是一组具有相同类型的变量的集合。但在实际的工作和生活中,为了表达一个数据集,需要用不同数据类型的变量。例如超女基本信息,姓名为字符串,身高和年龄为整数,体重为浮点数,身材和颜值为字符串,因为数据集各要素的数据类型不同,不能用一个数组来存放。
用我们之前学过的知识,如果要存放超女信息,可以用多个变量,如下:
char name[51]; // 姓名
int age; // 年龄
int height; // 身高,单位:cm
double weight; // 体重,单位:kg
char sc[31]; // 身材,火辣;普通;飞机场
char yz[31]; // 颜值,漂亮;一般;歪瓜裂枣
这种方式有一个缺陷,如果某数据集有100个要素,就要定义100个变量,对100个变量初始化,把100个变量作为函数的参数传递,实在太麻烦。
在C语言中,使用结构体(struct)来存放一组不同类型的数据,语法如下:
struct 结构体名
{
结构体成员变量一的声明;
结构体成员变量二的声明;
结构体成员变量三的声明;
......
结构体成员变量四的声明;
};
结构体是一个集合,是一种构造的数据类型,是程序员为了描述一个数据集自己定义出来的数据类型。结构体的成员(member)可以是任意类型的变量,也可以是结构体变量。以超女为例:
struct st_girl
{
char name[51]; // 姓名
int age; // 年龄
int height; // 身高,单位:cm
int weight; // 体重,单位:kg
char sc[31]; // 身材,火辣;普通;飞机场
char yz[31]; // 颜值,漂亮;一般;歪瓜裂枣
};
二、结构体变量
结构体是一种程序员自定义的数据类型,是模板,可以用它来定义变量。例如:
struct st_girl queen, princess, waiting, workers;
定义了四个结构体变量,queen王后、princess王妃,waiting宫女和workers侍者。
三、占用内存的情况
理论上讲结构体的各个成员在内存中是连续存放的,和数组非常类似,但是,结构体的占用内存的总大小不一定等于全部成员变量占用内存大小之和。在编译器的具体实现中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙。用sizeof可以得到结构体占用内容在总大小,sizeof(结构体名)或sizeof(结构体变量名)都可以。
示例(book90.c)
/*
* 程序名:book90.c,此程序用于演示C语言的结构体占用内存的情况
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
struct st_girl
{
char name[50]; // 姓名
int age; // 年龄
int height; // 身高,单位:厘米cm
char sc[30]; // 身材,火辣;普通;飞机场。
char yz[30]; // 颜值,漂亮;一般;歪瓜裂枣。
};
int main(