指针数组是指由指针组成的数组,这个比较好理解;数组指针是指向一个数组的指针,其实字面上也比较好理解。容易混淆的地方在于书写形式有些类似
:::cpp
int *p[n]; //array of pointers
int (*p)[n];//pointer to an array
指针数组可以像普通数组一样使用,只不过每个元素是指针而已,数组指针可直接指向一个数组,从而用来遍历一个数组,一个简单的例子如下:
::cpp
void PrintLine(int *p,int n)
{
for(int i=0;i<n;i++)
printf("%*d",2,p[i]);
printf("\n");
}
int main(int argc, const char *argv[])
{
int a[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
a[i][j]=i*j;
int (*p)[4]=a;
PrintLine(p[1],4);
PrintLine(p[2],4);
}
另一个容易混淆的对象是函数指针,函数指针本身的形式如下
:::cpp
int (*p)(int);
但是经常会有各种各样的变化,比如
:::cpp
int* (*p)(int *);//参数和返回值都是指针的函数指针
int (*p[10])(int);//一个指针数组,每个元素都是指向一个函数的指针(返回值和参数都是int)
int* (*p[10]);//等同于int**p[10],二维指针数组
int* (*p)[10];//数组指针,指向一个数组,每个元素都是int指针
int(*(*f)(int))(int);//f是一个函数指针,指向一个参数为int返回值为一个函数指针(参数和返回值都是int)
PREVIOUS关于Django url映射的一些小问题
NEXT变长数组的问题