假设我们有一个 void (*func_ptr)()
类型的函数指针 func_ptr
。然后我们知道使用它我们可以使用这个指针调用函数:
(*func_ptr)();
func_ptr();
但同样,假设我们有一个指向整数数组的指针 int (*arr_ptr)[5]
,那么为什么我们不能将该数组引用为 arr_ptr[]
,因此它的元素如 arr_ptr[0]
、arr_ptr[1]
等?为什么我们只能使用 (*arr_ptr)[0]
和 (*arr_ptr)[1]
?
最佳答案
arr_ptr[0]
的类型是int [5]
; (*arr_ptr)[0]
的类型是 int
。如果您愿意,可以使用 arr_ptr[0][0]
。
#include <stdio.h>
int main(void) {
int (*arr_ptr)[5];
int a[2][5] = {{1, 2, 3, 4, 5}, {11, 12, 13, 14, 15}};
arr_ptr = a;
printf("%d %d\n", (*arr_ptr)[2], arr_ptr[1][2]);
return 0;
}
你可以看到 code "running" at ideone .
函数指针可以任意使用(不错)语法糖。
关于c - 为什么我们可以同时使用函数指针作为 (*func_ptr)() 和 func_ptr() 来调用函数,但数组指针却不能呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372942/