【发布时间】:2019-05-11 17:10:39
【问题描述】:
我是 Java 开发人员,而不是 C 程序员。我正在尝试调用一些接收二维数组的函数,尝试如下:
#include <stdio.h>
int foo(int mat[][N])
{
printf("%d",N); /* <--- here error */
}
int main()
{
int a[5][5] =
{
{1, 2, 3, 4,5},
{1, 5, 5, 5,2},
{1, 4, 30,4,2},
{1, 2, 2,2, 2},
{1,1, 1,1, 2 }
};
foo(a);
return 0;
}
但是编译器说:
'N' 未声明(在此函数中首次使用)
我必须有签名:int foo(int mat[][N])
那我应该如何传递二维数组呢?
【问题讨论】:
-
你应该定义
N。 -
'N' undeclared。声明N。 -
但它不知道
a是5X5矩阵? @EugeneSh。 -
@Malwarey 会怎样?把自己放在编译器的位置。您正在为源文件生成代码。在预处理器完成从
#includes 中吸收所有内容并执行宏扩展等之后,您将开始实际编译源代码,您在这里看到的第一件事是int foo(int mat[][N])。现在,你怎么知道N当时是什么?它不是由编译器推断或推导出来的。这不是 C 的工作方式。 -
C 数组是连续的内存块。他们不“记住”自己的大小。
标签: c