C++语言程序设计

指针变量也可以指向一个结构数组，这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的某一个元素，这时结构指针变量的值是该结构数组元素的首地址。
设ps为指向结构数组的指针变量，则ps也指向该结构数组的下标为0的元素，ps+1指向下标为1的元素，ps+i则指向下标为I的元素，这与其它类型的数组的情况并无不同。
结构指针的算术运算遵循指针运算的一般规则，例如：
employee list[100];
employee *pp=list;
employee是一个结构类型，list是大小为100的结构数组，结构指针pp存储 数组list的首地址，即list[0]。表达式pp+1指向元素list[1]，表达式pp+n的指向数组元素list[n]。
下面是一个应用关于指向结构数组的指针的例子：

| 例8-9

struct stu
{
int num;
char *name;
char sex;
float score;
}boy[5]={
{101,"Zhou ping",'M',45},
{102,"Zhang ping",'M',62.5},
{103,"Liou fang",'F',92.5},
{104,"Cheng ling",'F',87},
{105,"Wang ming",'M',58},
};
void main()
{
stu *ps;
printf("No\tName\t\t\tSex\tScore\t\n");
for(ps=boy;ps<boy+5;ps++)
printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
}

在该程序中，定义了stu结构类型、stu数组boy，并作了初始化赋值。在main函数内定义ps为指向stu变量的指针。在循环语句for的表达式1中，ps指向boy变量，然后循环5次，输出boy数组中各成员值。
应该注意的是：一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员，但是，不能使它指向一个成员，因为结构变量与结构变量中的成员类型不同。下面的赋值是错误的：
ps=&boy[1].sex;
而只能是：
ps=boy; //赋予数组首地址
或者是：
ps=&boy[0]; //赋予0号元素首地址
例8-3给出了指向结构的指针的定义和用法。程序开始定义了结构类型Person_Infor，然后在主程序中定义了指向结构的指针p1，并用"p1=new Person_Infor;"语句动态地给p1分配了内存。这样，便可以给该指针指向的结构变量的内存单元进行赋值。对内存单元的访问使用了"->"运算符，如p1->age=32，而"strcpy(p1->name,"Bobbie");"是利用了字符串的拷贝函数strcpy( )对p1->name进行赋值。然后通过p1->name和p1->age实现对p1所指的Person_Infor的两个成员进行访问。最后，释放为指针所指结构分配的内存，这对于动态分配内存的变量来说是非常重要的，否则，会引起内存泄露。