声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是(A)
A.int (*p[10])(int*)
B.int [10]*p(int *)
C.int (*(*p)[10])(int *)
D.int ((int *)[10])*p
让我们一步步解释一下这个声明
1.类型:int 表示函数的返回类型是整数。
2.函数指针:(*p[10]) 表示 p 是一个包含10个元素的数组,每个元素都是一个指针,指向一个函数。
3.参数类型:(int *) 表示函数的参数是一个指向整数的指针。
这个声明的结构可以分解为以下几个部分:
1.int (...):这表示函数的返回类型是 int。
2.(*...):这表示括号中的内容是一个指针。
3.p[10]:这表示 p 是一个有10个元素的数组。
4.(int *):这是函数的参数列表,表示函数接受一个指向 int 的指针作为参数。
将这些部分组合起来,我们得到 int (*p[10])(int *),这是一个声明,它创建了一个名为 p 的数组,数组中的每个元素都是一个函数指针,这些函数接受一个 int 指针作为参数,并返回一个 int。
补充:指针数组与数组指针
指针数组是一个数组,其元素都是指针。这意味着数组的每个元素都存储着一个地址,这个地址指向某个数据或函数。指针数组的声明如下:
int *arr[10]; // arr是一个包含10个int指针的数组。在这个例子中,arr 是一个数组,有10个元素,每个元素都是一个指向 int 类型数据的指针。
数组指针
数组指针是一个指向数组的指针。这意味着指针指向的是一个完整的数组,而不是数组中的单个元素。数组指针的声明如下:
int (*ptr)[10]; // ptr是一个指向包含10个int元素数组的指针。在这个例子中,ptr 是一个指针,它指向一个具有10个 int 类型元素的数组。
【关键区别】
指针数组:是一个数组,主要关心的是数组中的指针所指向的内容。
数组指针:是一个指针,主要关心的是这个指针指向的整个数组的内容。
【记忆方法】
如果*号紧跟在数据类型后面,它定义的是一个指针数组。
如果*号紧跟在变量名前面,并且变量名被括号包围,它定义的是一个数组指针。