c - 为什么我们可以同时使用函数指针作为 (*func_ptr)() 和 func_ptr() 来调用函数,但数组指针却不能呢?

标签 c arrays function-pointers pointer-to-array

假设我们有一个 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/

相关文章:

c - 以下程序打印的输出是什么?如何评估if条件表达式?

javascript - AngularJS - 一级数组上的 ng-repeat 表格

arrays - 我如何在 Matlab 中定义结构

javascript - javascript的执行顺序

c - 向处理函数发送时间相关信号并在 c 中正确理解 setitimer、getitimer

c - 基本C,输出不正确

c - 了解链路层多播

WHERE 子句中的 SQL IN 运算符

c - 线程: Passing struct to function

C++调用存储在映射结构中的函数指针