【发布时间】:2020-12-21 07:41:42
【问题描述】:
我正在研究简单的源代码。并找到了这一行
int (*pfds)[2];
是否表示指向类似函数的指针
void (*fun_ptr)()[2] = &fun;
我认为是指向函数fun(void)的指针数组
【问题讨论】:
标签: c
我正在研究简单的源代码。并找到了这一行
int (*pfds)[2];
是否表示指向类似函数的指针
void (*fun_ptr)()[2] = &fun;
我认为是指向函数fun(void)的指针数组
【问题讨论】:
标签: c
int (*pfds)[2];----> pfds 是一个指向 2 个元素的数组的指针。
void (*fun_ptr)()[2]----> 将fun_ptr 声明为指向函数的指针,该函数返回由 void 的 2 个元素组成的数组。但它是无效的。因为在 C 中,函数返回数组是不允许的。
void* (*fun_ptr)() -----> 将fun_ptr 声明为指向函数返回的指针,指向void 的指针。这是有效的。如果你想返回一个 void 类型的数组,这就是你所需要的。
【讨论】:
int (*pfds)[2]; 是一个指向包含两个元素的数组的指针。
括号在那里是因为int *pfds[2]; 将是一个由两个指针组成的数组,如char *argv[] 是一个字符指针(即字符串)数组。
函数指针void (*fun_ptr)() 有第二组括号,用于参数列表:int (*add)(int x, int y)。
void (*fun_ptr)()[2] 或 void *fun_ptr() 似乎无效。
【讨论】: