首页 > 后端开发 > C++ > 为什么我不能将多维数组作为 C 中的指针数组传递给函数?

为什么我不能将多维数组作为 C 中的指针数组传递给函数?

Patricia Arquette
发布: 2024-12-15 15:03:22
原创
809 人浏览过

Why Can't I Pass a Multidimensional Array to a Function as an Array of Pointers in C  ?

理解无法将多维数组传递给函数

考虑以下代码片段:

#include <stdio.h>
void print(int *arr[], int s1, int s2) {
    int i, j;
    for(i = 0; i < s1; i++)
        for(j = 0; j < s2; j++)
            printf("%d, ", *((arr + i) + j));
}

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

此代码旨在将多维数组 a 传递给采用 int 指针数组 int 的函数 print *arr[].然而,在 C 中,此代码会生成以下错误:

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

解释:

问题的症结在于数据类型不兼容。像 a 这样的 C 风格多维数组不能直接转换为指向 int *arr[] 指针数组的指针。在 C 中, a 的数据类型是 int[4][4],它表示整数的二维数组。另一方面,int *arr[]是一个指向整数数组的指针,其中每个元素都是一个指向整数的指针。

解决方案:

到要解决此问题并将多维数组传递给采用 int 指针数组的函数,您可以修改代码以将多维数组显式转换为指针数组。这可以通过利用“将多维数组转换为 C 中的指针”问题的已接受答案中描述的技术来实现。

附加说明:

  • 由于打印中的额外错误,初始示例中提供的代码在 C 中表现出意外的行为代码。
  • 使用非零值初始化数组 a 以观察数组传递中错误的影响至关重要。
  • 由于打印,数组传递中的错误在 C 中被掩盖bug。
  • C 错误消息清楚地表明了转换问题,而 C 编译器可能会错误地发出警告被忽略。

以上是为什么我不能将多维数组作为 C 中的指针数组传递给函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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