首页 理论教育C语言程序设计基础:指针数组的定义与引用

C语言程序设计基础:指针数组的定义与引用

【摘要】:指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。

指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组定义的一般形式为:

[存储类别符]数据类型符*数组名[常量表达式];例如,int*name[10];就定义了含有10个指针元素的指针数组,每一个指针数组元素都是一个整型的指针变量,即可以存放一个整型数据的地址(或者整型一维数组的始址)。例如,下面的语句序列所描述的指针数组与被指向数据对象之间的关系如图8.8所示。

图8.8 指针数组与被指向数据对象的关系示意图

指针数组也可以初始化,其形式如下:

[存储类别符]数据类型符*数组名[常量表达式]={地址量1,地址量2,…};

例如,int x,y,*add[]={&x,&y};和double a[10],b[35],*p[]={a,b};等。

指针数组在C程序中常用于处理二维数组,此时指针数组中的每个元素被赋予二维数组每一行的首地址,即每个指针数组元素指向一个一维数组(二维数组中的一行)。

【例8.13】 用一维指针数组处理二维数组示例。

上面程序在调用函数MakeArray生成二维数组后,通过循环使用表达式p[i]=a[i]将二维数组的每行首地址赋值给指针数组的元素,使得指针数组的每一元素指向二维数组中的一行;最后通过用*(p[i]+j)形式输出数组a的元素值。程序一次运行的结果为:

11 41 50 19 61

89 55 31 15 56

53 28 79 4 28

指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。

【例8.14】 编写程序解决下述问题:5个学生,每人所学课程门数不同(成绩存放在一维数组中,以-1表示结束),输出他们的各门课程的成绩。(www.chuimin.cn)

上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。

图8.9 例6.14程序的数据结构

二级指针变量p指向指针数组grad,而grad的每一个元素分别指向一个一维数组,最初时*p就等价于grad[0],也就是数组stu1的首地址。注意二级指针变量的每移动一步就指向grad的下一个数组元素,则*p就等价于当前所指向的指针数组元素,也就是指针数组元素指向的一维数组的首地址;对于*p而言,它仍然是一个指针变量,但它是一个一级指针变量,当其指向一个一维数组后,其每次移动就会指向下一个数组元素,程序中通过*p指针的移动并取指针运算(**p)来操作数组元素。程序的执行结果为:

学生1 成绩:78  98  73

学生2 成绩:100 98

学生3 成绩:88

学生4 成绩:100 78 33  65

学生5 成绩:99 88