【发布时间】:2020-01-26 08:57:04
【问题描述】:
void setArr(int x[2][2], int a, int b)
{
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
x[i][j] = 0;
}
int main(void)
{
int *arr[2];
for (int i = 0; i < 2; i++) {
arr[i] = malloc(sizeof(int) * 2);
}
setArr(arr, 2, 2);
}
我知道这段代码不起作用,但我不知道它背后的原因。任何人都可以向我解释为什么,在这种情况下,我不能使用 x[2][2] 作为接收 arr 的参数。 谢谢
我将代码放入可视化工具中,setArr 函数将 arr 的元素设置为 NULL。我知道 NULL 在 C 中是 0。但我无法连接为什么以及如何将 arr 的元素设置为 NULL。
【问题讨论】:
-
这是一本很好的读物——希望对你有所帮助——geeksforgeeks.org/pass-2d-array-parameter-c
-
因为
int *arr[2];声明了一个指针数组,而void setArr(int x[2][2], ...)需要一个指向int [2 ]。你想要void setArr(int **x, int a, int b) -
@DavidC.Rankin 不,他们可能不想要
int**,因为他们需要一个二维数组。 -
@Lundin - 这是函数设置要采用的,但不是
main()中声明的。一个或另一个必须改变。假设int *arr[2];的main()中的声明和后续分配是有意的,那么参数必须更改为int **x。如果上面的main()是错误的,而预期是int arr[2][2];,那么循环和分配就没有意义了。你怎么知道哪个是正确的?
标签: c