结构是一种数据类型,因此它也有对应的结构数组和指向结构的指针。
结构数组
定义结构数组和定义其他类型的数组在语法上并无差别。需要注意的是,在定义结构数组之前,我们必须先定义好这个结构。比如:
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
……
student S[3]={ {428004, "Tomato",20, "ComputerScience",84.5},
{428005, "OOTTMA",20, "ComputerScience",85.0},
{428006, "OTA",20, "ComputerScience",89.8}};
……
使用结构数组只要遵循结构和数组使用时的各项规则即可,在此不作赘述。
结构指针
在上一章我们了解到指针的一个重要作用就是实现内存的动态分配(堆内存)。待我们学完了这一章,我们会发现结构指针也是一个非常有用的工具。
所谓结构指针就是指向结构的指针。定义好一个结构之后,定义一个结构指针变量的语法格式为:
结构类型名 *指针变量名;
我们知道一般的指针是通过间接引用操作符“*”来访问它指向的变量。那么我们如何访问结构指针所指向的变量的成员数据呢?这里要介绍箭头操作符“->”,我们用它可以访问到指针指向的变量的成员数据。它的格式为:
指针变量名->成员数据
需要注意的是,箭头操作符的左边一定是一个结构指针,而成员操作符的左边一定是一个结构变量,两者不能混淆使用。
下面我们来看一段程序,掌握如何使用结构指针:(程序9.4)
#include "iostream.h"
struct student
{
int idNumber;
char name[15];
int age;
char department[20];
float gpa;
};
void display(student *arg);//结构指针作为函数参数
int main()
{
student s1={428004, "Tomato",20, "ComputerScience",84.5};//初始化结构变量
student *s1ptr=&s1;//定义结构指针变量,并把s1的地址赋值给s1ptr
display(s1ptr);
return 0;
}
void display(student *arg)
{
cout <<"学号:" <<arg->idNumber <<"姓名:" <<arg->name <<"年龄:" <<arg->age <<endl <<"院系:" <<arg->department <<"成绩:" <<arg->gpa <<endl;//用箭头操作符访问成员数据
}
运行结果:
学号:428004姓名:Tomato年龄:20
院系:ComputerScience成绩:84.5