什么是指针数组
答:就是一个数组,里面存的是指针而已
它的写法可以如下:
int *a[10];
看看,它就是一个指针数组,数组名字当然是a,里面有10个元素,每个元素都是一个int *类型(即存放整型地址的指针)的指针。我们可以这样用,比如:
#include<stdio.h>C
int main()
{
int x=10,y=20,z=30;
int *a[10];
a[0]=&x;
a[1]=&y;
a[2]=&z;
//...
printf("%d %d %d\n",*a[0],*a[1],*a[2]);
return 0;
}
大家可以看到,数组a有10个元素,每个元素都可以存放一个整型的指针,程序当中存放了三个指针,分别是x,y,z的地址,然后进行了输出,请大家理解代码的含义,进而也就理解了指针数组,以及指针数组的用法
什么是数组指针
答:就是一个指针,只不过这个指针指向一个数组
什么?还能指向一个数组??没错,你没有看错,的确可以用一个指针指向一个数组,或者,我们也可以叫它为行指针
比如我们,定义一个数组指针,如下:
int (*p)[10];
大家注意看它的写法,因为小括号优先级高的原因,所以p本身是指针的属性,指向的是一个有10个整型元素的一个数组,即所谓的行指针。那么它怎么用,如何用呢,下面给大家代码理解:
#include<stdio.h>
int main()
{
int (*p)[10];
int a[10]={1,2,3,4,5,6,7,8,9,0};
p=&a;
printf("%d\n",*(*(p+0)+1));
printf("%d\n",p[0][3]);
return 0;
}
大家可以看到我首先定义了一个行指针p,然后定义了一个一维数组a,然后将p指向了a数组,这就是行指针指向了一行数组,类型都是整型,都是有10个元素,因此类型一致。那么注意后面的两个printf,都是通过p来输出数组a当中的两个元素,大家可以看到,都是用到了二维的数组的形式输出,为什么可以呢?原因就在于p是行指针,每次加1也就意味着加一行,因此如果用p来输出a元素的值,需要两个"降级"才可以,就会有这样的写法,请大家上机试验,反复理解