【发布时间】:2016-11-09 05:57:27
【问题描述】:
在C99中,这两者有很大不同吗?:
int main() {
int n , m;
scanf("%d %d", &n, &m);
int X[n][m];
X[n-1][m-1] = 5;
printf("%d", X[n-1][m-1]);
}
和:
int main(int argc, char *argv[]) {
int n , m;
int X[n][m];
scanf("%d %d", &n, &m);
X[n-1][m-1] = 5;
printf("%d", X[n-1][m-1]);
}
第一个似乎总是有效,而第二个似乎适用于大多数输入,但会为输入 5 5 和 6 6 提供段错误,并为输入 9 9 返回一个不同于 5 的值。那么在使用可变长度数组声明它们之前,您是否需要确保获取这些值,或者这里还有其他事情发生吗?
【问题讨论】:
-
第二个是完全错误的......因为
n和m没有初始化。int X[n][m];使用代码中的m和n值——您不能稍后设置它们,也不能通过稍后更改它们来调整数组的大小。 -
好的,谢谢,我想确保它只是一个订购的东西,而不是我没有想到的其他东西。