【发布时间】:2012-12-16 04:19:39
【问题描述】:
一维数组作为函数参数:
#include <stdio.h>
#include <string.h>
int func(int a[], int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", a[i][j]);
}
int main(void)
{
int a[2] = {1,2};
func(a, 2);
}
它可以正确编译和运行。
但是当二维数组作为函数参数时:
#include <stdio.h>
#include <string.h>
int func(int a[][], int n)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0 ; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
int main(void)
{
int a[2][2] = {{1,2}, {3,4}};
func(a, 2);
}
它无法正确编译。我必须像这样修改代码:
#include <stdio.h>
#include <string.h>
int func(int a[][2], int n)
{
int i, j;
for(i = 0; i < n; i++)
for(j = 0 ; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
int main(void)
{
int a[2][2] = {{1,2}, {3,4}};
func(a, 2);
}
不知道为什么?任何人都可以解释它是如何工作的?非常感谢。
【问题讨论】:
-
int a[]然后a[i][j]- 这到底是如何正确编译的? -
这个问题不是“如何在 C++ 中使用数组”的重复问题。无论如何,这个问题是如此广泛(措辞如此糟糕)。这个问题更具体(尽管需要对英语正确性进行一些编辑)。此外,即使该问题中涉及的某些内容与此处相关,但它们通常特定于 C++,而此问题应仅限于 C 并面向 C 习语。如果这是关于 SO 的另一个问题的重复,让我们在这里列出正确的问题。