【问题标题】:Pointer to a void function指向空函数的指针
【发布时间】:2021-02-24 20:37:32
【问题描述】:

声明指向 void 函数的指针的正确方法是什么?

void reverseArray(int arraySize, int a[]){
}

我认为有些正确的许多尝试之一

void (*reversePtr)(int, int) = &reverseArray;

【问题讨论】:

  • 您看到的错误是什么?除了第二个参数类型外几乎是正确的。
  • @EugeneSh。警告:从不兼容的指针类型'void()(int,int *)'初始化'void()(int,int)'不确定这是什么意思,但这就是我一直得到的跨度>
  • 这正是参数的类型不匹配。

标签: c initialization function-pointers declaration


【解决方案1】:

函数指针的第二个参数类型无效。由于函数声明如下

void reverseArray(int arraySize, int a[]);

然后指向函数的指针看起来像

void ( *reversePtr )( int, int[] ) = reverseArray;

或喜欢

void ( *reversePtr )( int, int * ) = reverseArray;

考虑到在&reverseArray这样的初始化表达式中不需要使用运算符的地址。只写reverseArray 就足够了,因为表达式中使用的函数指示符被转换为指向其类型的指针。

例如你甚至可以写

void ( *reversePtr )( int, int * ) = *****reverseArray;

void ( *reversePtr )( int, int * ) = *&*&*&*&*&reverseArray;

【讨论】:

  • 个人更喜欢第二种,指针表示法,尤其是对于新 C 程序员的答案,因为它强化了您传递的是指针而不是数组本身
猜你喜欢
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多