结构体数组与结构体指针

结构体基础-结构体数组与结构体指针

1.结构体数组

1.1声明结构体数组

一般形式如下:

struct结构体名
{
	成员列表;
}数组名;

举例:

struct book
{
	float price;
	int page;
	char title[50];
	char author[50];
}str[50];         定义时声明一个大小为50的结构体数组

struct book lib[100];   声明大小为100的结构体数组
1.2初始化结构体数组

初始化的方法同前面结构体初始化。

2.结构体指针

2.1声明结构体指针

声明一个名字为lib_point的结构体指针

struct book* lib_point;

首先是关键字struct,
其次是结构体名book,
然后是间接访问运算符(*),后面跟结构体指针名。
这个语法和其他声明指针的语法是相同的。

此时,并未创建新的结构体变量,只是创建了一个空指针 lib_point,它可以指向book类型的结构体。

能不能在声明结构的时候,直接定义一个结构体指针?

struct book
{
	float price;
	int page;
	char title[50];
	char author[50];	
}*str_p;
2.2初始化结构体指针

指针lib_point原则上可以指向任意的现有book类型的结构体。

如果Hero是一个book类型的结构体变量,可以有如下的写法:

struct book Hero;
lib_point = &Hero;

注意:结构体变量名与数组名的含义是不同的,结构体变量名并不是该变量的地址,因此需要在结构体变量名前加上取址运算 “&”。

当结构体指针需要指向结构体数组时,要让指针指向结构体数组的第一个元素

struct book lib[100];   声明大小为100的结构体数组
lib_point = &lib[0];

疑问:既然lib是一个数组(结构体数组),那lib就是数组名,也就是数组的首地址,也是数组第一个元素的地址
那么

lib_point =lib;

是不是也是合法的?

是的,也是合法的。

2.3 结构体指针的优点

指向结构体的指针通常比结构体本身更容易操作
传递指针比传递结构体的效率更高
在一些用于表示数据的结构体中可以包含指向其他结构体的指针,如链表。

3. 用结构体指针访问结构成员

3.1使用括号
struct book* lib_point;
(*lib_point).page = 350;

结构体变量可以使用“.”运算符,当对结构体指针使用.运算符时,一定要使用括号,因为 . 运算符的优先级是最高的,如果不使用括号,就会先执行点运算后执行 “*” 运算

3.2使用指向运算符“->”

这是用于结构体指针的访问结构体成员的一种特殊用法

struct book* lib_point;
lib_point->page = 350;

需要注意的问题:
lib_point是结构体的地址,也是第一个成员title的地址,虽然两个地址是相同的,但是它们的类型是不同的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiawucha159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值