Mem*_*sue 1 c arrays pointers function-pointers
我试图让一个指针函数数组工作.但是,我注意到,当函数的一个参数是数组类型时,我得到一个错误.我不知道为什么我一直收到错误
错误信息
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
void (*p[1])(int, int, int) = { mini };
Run Code Online (Sandbox Code Playgroud)
码
// function prototype
void min(int row, int col, const int arr[row][col]);
void(*p[1])(int, int, const int) = { min}; // error happens here
int main() {
// rest of code
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
您尝试声明为数组元素类型的目标的函数类型的第三个参数是2D,可变长度数组const int.但是,在数组声明中,您尝试将其声明为单个声明const int.这些不兼容.
声明它的最明确的方式是这样的:
void(*p[1])(int, int, const int[*][*]) = { min };
Run Code Online (Sandbox Code Playgroud)
或者像这样:
void(*p[1])(int, int, const int[][*]) = { min };
Run Code Online (Sandbox Code Playgroud)
.两者是等价的.将*在阵列尺寸表示未知大小的VLA -未知的,因为它取决于其他参数.数组参数的第一个维度(仅)总是可以省略,我通常更喜欢省略它,但在这种情况下我更喜欢第一个声明,因为即使编译器忽略了第一个数组维度,人类读者也很清楚这也是一个可变维度.