首页 >后端开发 >C++ >如何正确地将多维数组传递给 C 和 C 中的函数?

如何正确地将多维数组传递给 C 和 C 中的函数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-15 00:50:12761浏览

How Can I Correctly Pass Multidimensional Arrays to Functions in C and C  ?

在 C 和 C 中传递多维数组

在 C 和 C 中,int4 类型的数组不能直接传递给需要数组的函数整数*。这种不兼容性源于这两种语言处理多维数组的方式的根本差异。

在 C 中,多维数组名称衰减为指向其第一个元素的指针,从而允许代码片段中示例的实现。然而,在 C 中,即使在函数调用中使用数组,数组也会保持其类型,从而导致遇到错误消息:

cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'

C 和 C 的解决方案

To将多维数组传递给 C 和 C 中的函数,一种称为指针算术的技术是使用:

  1. 将数组指针声明为指向指针的指针: int **arr.
  2. 将数组名称转换为指向数组指针: arr = (int **)a.

修改后的代码

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((int **)a, 4, 4);
}

重要说明

代码编译执行在 C 和 C 中都取得了成功。但是,对 printf 语句进行了额外的更正,以确保使用 arr[i][j] 而不是 *((arr i) j) 正确访问数组元素。

请记住,无法传递多维数组直接由 C 和 C 中数组的不同行为引起,必须相应地解决。

以上是如何正确地将多维数组传递给 C 和 C 中的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn