理论教育 C语言程序设计:结构体类型指针

C语言程序设计:结构体类型指针

时间:2023-11-02 理论教育 版权反馈
【摘要】:可以定义指向结构体类型变量的指针变量,该指针变量中存放着结构体类型变量所占内存单元的首地址。一个指向结构体类型变量的指针变量定义之后,C编译程序为其分配了一个用于存放地址的空间,但该空间并没有具体的值,即该指针变量无具体的指向。结构体类型变量的地址必须通过取地址符&取得。例9.3使用指向结构体类型的指针变量完成统计身高和体重工作。

C语言程序设计:结构体类型指针

1.指向结构体类型变量指针

结构体类型变量所占内存空间是各成员所占内存空间的总和,结构体类型变量的地址是这些内存空间的首地址。可以定义指向结构体类型变量的指针变量,该指针变量中存放着结构体类型变量所占内存单元的首地址。

声明指向结构体类型变量的指针变量的格式如下:

例如:

这段代码定义了struct staff类型的结构体类型变量sta1和指向结构体类型变量的指针变量p。

一个指向结构体类型变量的指针变量定义之后,C编译程序为其分配了一个用于存放地址的空间,但该空间并没有具体的值,即该指针变量无具体的指向。因此必须将一个结构体类型变量的地址或结构体类型数组元素的地址存放到该空间,该指针变量才有确定的指向。

结构体类型变量的地址必须通过取地址符&取得。例如:

当引用结构体成员时,前面以圆点“.”作为连接符,如sta1.name或sta1.sex。

因为,当执行语句“p=&sta1;”之后,(*p)与sta1等价,所以通过指向结构体类型的指针变量引用结构体类型成员可以表示为:(*p).name或(*p).sex。

与上面等价的另一种引用结构体类型成员方法是用箭头操作符“->”,如p->name (等价于(*p).name)或p->sex(等价于(*p).sex)。

关于指向结构体类型的指针变量的使用,应注意以下几点:(www.daowen.com)

(1)箭头运算符“->”由一个减号(-)和一个大于号(>)组成,且运算优先级最高。指向结构体类型的指针变量p中存储的是结构体类型变量的地址,p指向结构体类型变量。

(2)不能将(*p).name写成“*p.name”。这是因为,“.”的优先级高于“*”。“(*p).name”的表达方式先作*p运算,而写成“*p.name”表示先作p.name运算。

(3)如果要对指针变量p所指向的变量进行输入/输出,则可以用以下语句来实现:

或者用如下语句实现:

2.指向结构体类型数组的指针

可以将结构体类型数组的首地址赋给指向结构体类型的指针变量p,那么该指针变量p就指向结构体类型数组的第一个元素,在执行p++运算后,该指针变量p就指向结构体类型数组的下一个元素。因此,使用指向结构体类型的指针变量p,就可以操作结构体类型数组。例如:

其中,p指向数组s的首地址,即s[0]的地址,执行语句“p++;”后,p指向数组s中的元素s[1],循环100次,p每次指向数组s的一个元素的地址,每次输入数组元素的各成员值。

例9.3 使用指向结构体类型的指针变量完成统计身高和体重工作。从键盘输入某小学一年级200个学生的信息(学号、姓名、身高、体重),然后输出所有学生的信息以及身高和体重的平均值。

程序代码如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈