c - 当函数将数组作为参数时,C“警告:从不兼容的指针类型初始化”
问题描述
我试图让一组指针函数工作。但是,我注意到,当函数的参数之一是数组类型时,我会收到错误消息。我不知道为什么我不断收到错误
错误信息
warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
void (*p[1])(int, int, int) = { mini };
代码
// 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
}
谢谢!
解决方案
您尝试声明为数组元素类型目标的函数类型的第三个参数是一个 2D 可变长度数组const int
。但是,在您的数组声明中,您尝试将其声明为单个const int
. 这些不兼容。
声明它的最清晰方法是这样的:
void(*p[1])(int, int, const int[*][*]) = { min };
或像这样:
void(*p[1])(int, int, const int[][*]) = { min };
. 两者是等价的。数组维度中的*
表示未知大小的 VLA——未知,因为它取决于其他参数。数组参数的第一个维度(仅)总是可以省略,而且我通常更喜欢省略它,但在这种情况下我更喜欢第一个声明,因为即使编译器忽略了第一个数组维度,人类读者也很清楚那也是一个可变维度。
推荐阅读
- javascript - 如何使用 AJAX 将 JSON 数据发送到 ASP 服务器?
- angular - 实施一个
带有灰色标题 - python - 两个不同数据框的两列的 Seaborn 图
- python - 当添加新行时,有什么方法可以从 csv 文件中删除第 100 行(或“最后一行”)?
- android - 从不同的活动 Android 中删除正在运行的服务
- python - get_access_token() 接受 0 个位置参数,但给出了 1 个
- windows - Matlab,Windows 兼容的 Docker 容器无法运行 Azure Devops CI/CD 作业的 Matlab 作业步骤
- python - 你可以在返回值后继续遍历列表吗?
- python - Spyder 无法启动:pyzmq
- vb.net - 彩票软件有问题