Welcome

首页 / 软件开发 / C语言 / 指针数组(一)

指针数组(一)2007-05-03前面介绍了指向不同类型变量的指针的定义和使用,我们可以让指针指向某类变量,并替代该变量在程序中使用;我们也可以让指针指向一维、二维数组或字符数组,来替代这些数组在程序中使用,给我们在编程时带来许多方便。

下面我们定义一种特殊的数组,这类数组存放的全部是指针,分别用于指向某类的变量,以替代这些变量在程序中的使用,增加灵活性。指针数组定义形式:

类型标识 *数组名[数组长度]

例如: char *str[4];

由于[ ] 比*优先权高,所以首先是数组形式str[4 ],然后才是与“*”的结合。这样一来指针数组包含4个指针s t r [ 0 ]、s t r [ 1 ]、s t r [ 2 ]、s t r [ 3 ],各自指向字符类型的变量。例如:

int *p t r [ 5 ] ;

该指针数组包含5个指针p t r [ 0 ]、p t r [ 1 ]、p t r [ 2 ]、p t r [ 3 ]、p t r [ 4 ],各自指向整型类型的变量。

[例6-22] 针对指针数组的应用,我们分别用指针数组的各指针指向字符串数组、指向一维整型数组、指向二维整型数组。

#include <stdlib.h>
#include <stdio.h>
m a i n ( )
{
char *ptr1[4]={"china","chengdu","sichuang","chongqin"};
/* 指针数组p t r 1 的4个指针分别依此指向4个字符串* /
int i,*ptr2[3],a[3]={1,2,3},b[3][2]={1,2,3,4,5,6};
for(i=0;i<4;i++)
printf(" %s",ptr1[i]);/依*此输出ptr1数组4个指针指向的4个字符串*/
printf(" ");
for(i=0;i<3;i++)
ptr2[i]=&a[i];/*将整型一维数组a的3个元素的地址传递给指针数组ptr2*/
for(i=0;i<3;i++)/*依此输出ptr2所指向的3个整型变量的值*/
printf("%4d",*ptr2[i]);
printf(" ");
for(i=0;i<3;i++)
ptr2[i]=b[i];/*传递二维数组b的每行首地址给指针数组的4个指针*/
for(i=0;i<3;i++)/*按行输出*/
printf("%4d%4d ",*ptr2[i],*ptr2[i]+1);
}

程序中指针数组与所指对象的关系如图6-12所示。

ptr1指针数组中的4个指针分别指向4个字符串,如图6-11的a)所示,程序中依此输出;ptr2指针数组共有3个指针,若将整型一维数组a中各元素地址分别传递给指针数组的各指针,则ptr2[0]就指向a[0];ptr2[1]就指向a[1];ptr2[2]就指向a[2]。若将二维数组各行的首地址分别传递给指针数组的各指针,如图6-11b)所示,这样一来,ptr2[0]就指向了b数组的第0行,该行有两个元素,其地址为ptr2[0]与ptr2[0]+1;相应指针数组第i个元素ptr2[i]指向的b数组的第i行两个元素地址分别为ptr2[i]与ptr[i]+1。