何为指针数组,顾名思义,指针数组就是数组元素全为指针的数组称为指针数组,其本质为数组。也就是说它是一个用来存放指针的数组。一维指针数组的定义格式为:”类型名 *数组标识符[数组长度]”,例:int *arr1[10]。那么数组指针则是指针,是指向数组首元素的地址的指针,其本质为指针,其定义格式如下
“类型名” (*变量名)[数组长度]”,int (*p)[10]。
如何更好地区分这两个定义呢?我们来看下面两个例子:
int *arr1[10] 由于[]的优先级高于*,所以arr1先与[]结合,然后再和*结合,即arr1是一个数组,它是用来存放指针的,即就是指针数组;
int (*arr2)[10] 由于该式子中有(),所以arr2先和*结合,再和[]结合,这就说明它是一个指针,指向的是一个大小为10个整型的数组,所以它是数组指针。
函数指针是指向函数的指针变量。 因此它首先是指针变量,该指针变量指向函数。有了指向函数的指针变量后,可用该指针变量调用函数。函数指针有两个用途:调用函数和做函数的参数。
函数指针数组是一个数组,其数组元素为函数指针。 例如:char ( a[4])(char *p),该数组内有四个指向函数的指针;它的用途用来做转移表,以简单的加法为例:
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数:");
scanf("%d %d",&a, &b);
int (*p)(int, int) = add(a, b);
printf("%d\n", p);
return 0;
}