首页 > 后端开发 > C++ > 为什么在 C 中将 C 风格的二维数组传递给需要 `int` 的函数不起作用?

为什么在 C 中将 C 风格的二维数组传递给需要 `int` 的函数不起作用?

Linda Hamilton
发布: 2024-12-21 03:07:13
原创
1145 人浏览过

Why Doesn't Passing a C-Style 2D Array to a Function Expecting `int` Work in C  ?

为什么在 C 中将 C 风格多维数组传递给采用 int* 数组的函数会失败

问题:

在 C 中,将多维 C 风格数组传递给需要 int* 数组的函数会产生编译器结果错误。

原因:

像 int4 这样的多维数组不能直接转换为 int* 类型的指针,这就是 int arr函数中的[]代表

示例:

#include<stdio.h>
void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Error in C++
}
登录后复制

C 会报错:

cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
登录后复制

解决方案:

在 C 和 C 中,将多维数组作为 int** 传递不是 有效的。为了有效地实现这一点,必须使用以下技术将数组转换为指针:

  • 将数组初始化为不同的值(例如,{1})以验证 C 没有忽略该数组传递错误。
  • 修改 printf 语句以正确访问元素((arr i) j) 或 arri。
  • 利用 Stack Overflow 线程“将多维数组转换为 c 中的指针”中提供的解决方法。

注意:

忽略编译器警告或未能实现正确的转换可能会导致未定义的行为和不可预测的结果。

以上是为什么在 C 中将 C 风格的二维数组传递给需要 `int` 的函数不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板