理解无法将多维数组传递给函数
考虑以下代码片段:
#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 中的指针数组传递给函数?的详细内容。更多信息请关注PHP中文网其他相关文章!