首页 理论教育C语言数组指针关系-C语言程序设计基础(第3版)

C语言数组指针关系-C语言程序设计基础(第3版)

【摘要】:例如,有如下所示的C语句序列:则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。此时应该注意到被指针变量p1指向的结构体数组元素本身是不能作为整体操作的,所以*p1也不能作为整体操作。

定义结构体类型指针变量后,既可以使用该指针变量指向结构体数组元素,也可以使用其指向结构体数组,该指针变量的值有两种情况:当该指针变量指向结构体数组元素时,表示该结构体数组元素的地址;当该指针指向结构体数组时,表示该结构体数组的首地址。

例如,有如下所示的C语句序列:

则结构体指针变量p1指向结构体数组元素a[2],其关系如图10.2所示。当需要表示指针变量所指向的数组元素值时,使用星号(*)运算符。此时应该注意到被指针变量p1指向的结构体数组元素(结构体变量)本身是不能作为整体操作的,所以*p1也不能作为整体操作。如果要使用p1指针为其指向的结构体数组元素a[2]的成员x赋值时,可以使用如下所示的两种形式:

(*p1).x=100;

p1->x=100;

如果结构体指针变量(例如,指针变量p2)指向结构体数组,并且指针并没有移动,其关系如图10.3所示。此时可以使用p2+i的形式来表示结构体数组i号元素的地址,用*(p2+i)来表示结构体数组的i号元素。此时如果要用指针变量来表示数组元素成员x的值,可以使用下面两种形式:

(p2+i)->x

(*(p2+i)).x

图10.2 指针变量指向数组元素

图10.3 指针变量指向数组

【例10.10】 编写程序实现功能:统计并输出年龄在18岁以上的学生人数。

程序执行时,首先通过指向结构体数组stu的指针变量输入了结构体数组的数据,然后将数组传递到函数ptstu进行输出操作,操作时使用了两种通过指向结构体数组指针变量表示数组元素成员的方式:(s+i)->name或(*(s+i)).age。程序一次执行过程和运行结果如下:

请依次输入学生数据信息:

20141001//以下是输入数据

李胜男(www.chuimin.cn)

18

20141002

张杰

17

20141003

魏小杰

19

年龄大于18岁的学生人数有:2人。   //输出数据