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

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

DDD
DDD原创
2024-12-24 17:28:18189浏览

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

将多维数组传递给 C 和 C 语言中的函数

在编程中,数组是存储数据集合的基本数据结构。处理多维数组时,了解如何将它们传递给函数以对其元素执行操作非常重要。

考虑以下 C 代码:

void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}

此代码旨在通过将 int[4][4] 类型的多维数组 a 传递给需要指向整数 (int **) 的指针数组的函数 print。令人惊讶的是,这段代码在 C 中编译成功,但在 C 中编译失败。

为什么 C 会引发错误

在 C 中,错误很明显:

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

此错误表示C 不允许从多维数组 (int[4][4]) 到整数指针数组 (int **) 的隐式转换。这是因为这两种数据类型在结构和解释上根本不同。

如何修复错误

要修复此错误,您可以使用 C 中称为“数组地址衰减”的技术或者在 C 中将多维数组显式转换为指针数组.

C:

int main() {
    int a[4][4] = {{0}};
    print(a, 4); // Pass the base address of the multidimensional array (array address decay)
}

void print(int *arr, int s) {
    // ...
}

C :

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Explicit conversion to an array of pointers
}

void print(int **arr, int s1, int s2) {
    // ...
}

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

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