C语言学习(九)之结构体

本文详细介绍了C语言中的结构体,包括结构体的基础概念、建立声明、定义变量、初始化、成员访问、结构数组、嵌套结构、结构指针的使用以及如何向函数传递结构信息。还探讨了联合(union)的声明和使用。
摘要由CSDN通过智能技术生成


设计程序时,最重要的步骤之一是选择表示数据的方法。在许多情况下,简单变量甚至是数组还不够。为此,C提供了结构变量(structure variable)提高表示数据的能力,它能让你创造新的形式。

一、结构体基础


1.1 什么是结构体

结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。


1.2 建立结构声明

结构声明(structure declaration)描述了一个结构的组织布局。声明语法如下:

structure 结构体名 {
	数据类型 成员1;
	数据类型 成员2;
	数据类型 成员3;
	...
	}
# include <stdio.h>

#define MAXLARGE  20

// 声明一个结构体名为book的结构体
struct book
{
   
	// 定义int类型的BookNum成员
	int booknum;
	// 定义char类型的Title数组成员,数组最大为MAXLARGE
	char title[MAXLARGE];
	// 定义char类型的author数组成员,数组最大为MAXLARGE	
	char author[MAXLARGE];	
	// 定义double类型的price成员
	double price;	
};


int main(void){
   

	return 0;
}

该声明描述了一个由一个int类型变量,两个char类型变量的数组和一个double类型的结构体。该声明并未创建实际的数据对象,只描述了该对象由什么组成。

在结构声明中,yong一对花括号括起来的是结构成员列表。每个成员都用自己的声明来描述。例如:title是一个内含MAXLARGE个元素的数组。成员可以是任意一种数据类型,甚至可以是其他结构!右花括号后的分号是必须的,它表示结构布局定义结束。

结构声明可以放在函数的外部也可以放在函数的内部。如果放在函数内部,就如同局部变量一样,只限于函数的使用。如果放在外部,那在声明之后的所有函数都可以使用。


1.3 定义结构变量

结构有两层含义。一层是结构布局,上面已经说过,结构布局是告诉编译器如何表示数据,但是它并未让编译器为数据分配空间。下一步是创建一个结构变量,即是结构体的另一层含义。

程序中创建结构变量的是:

// 声明一个结构体名为book的结构体
struct book
{
   
	// 定义int类型的BookNum成员
	int booknum;
	// 定义char类型的Title数组成员,数组最大为MAXLARGE
	char title[MAXLARGE];
	// 定义char类型的author数组成员,数组最大为MAXLARGE	
	char author[MAXLARGE];	
	// 定义double类型的price成员
	double price;	
	
// library表示创建一个book结构体的变量名
} library;

等效于:
struct book library;

编译器执行这行代码便创建了一个结构变量library。编译器使用book模板为该变量分配空间。

声明结构的过程和定义结构变量的过程可以组合成一个步骤。则如下所示:

struct 
{
   
	// 定义int类型的BookNum成员
	int booknum;
	// 定义char类型的Title数组成员,数组最大为MAXLARGE
	char title[MAXLARGE];
	// 定义char类型的author数组成员,数组最大为MAXLARGE	
	char author[MAXLARGE];	
	// 定义double类型的price成员
	double price;	
} library;  // 声明的右花括号后跟变量名

在结构变量的声明中,struct book所起的作用相当于一般声明中的int或float。例如:可以定义一个struct book类型的变量,甚至是指向struct book的指针。

struct book doyle, panish, *ptbook;

1.4 初始化结构

初始化一个结构变量与初始化数组的语法类似:

struct book library=
{
   
	100010,
	"Tom and Jerry",
	"unknow",
	10.00
};

1.5 访问结构成员

结构类似一个超级数组,在这个超级数组中,可以是一个元素为char类型,下一个元素为int类型,在数组中可以使用下标单独访问数组中的各个元素。而在结构体中需要使用结构成员运算符 ------( . )访问结构体中的成员。

# include <stdio.h>

#define MAXLARGE  20

struct book
{
   
	int booknum;	// 定义int类型的BookNum成员
	char title[MAXLARGE];	// 定义char类型的Title数组成员,数组最大为MAXLARGE
	char author[MAXLARGE];	// 定义char类型的author数组成员,数组最大为MAXLARGE
	double price
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值