我遇到了这两个代码块:
#include <stdio.h>
int main() {
int a[10], i;
for (i = 1; i <= 10; i++) {
scanf("%d", &a[i]);
printf("%d\n", a[i]);
}
return 0
}
当我运行第一段代码时,代码运行良好,但在某些时候它被覆盖了,我没有得到预期的结果。
但是,当我运行第二段代码时,程序运行得非常好,没有错误。
#include <stdio.h>
int main() {
int size;
scanf("%d", &size);
int a[size], i;
for (i = 1; i <= size; i++) {
scanf("%d", &a[i]);
printf("%d\n", a[i]);
}
return 0
}
为什么第二种情况程序运行完美?即使在第二种情况下,下标也会超过声明的数组大小。
最佳答案
两个代码片段都有数组越界访问,所以你会看到未定义的行为
for(i=1;i<=size;i++)
如果您的数组大小为 10
,则有效索引为 0-9
一旦我们说出未定义的行为,那么任何事情都可能发生,甚至是崩溃。当你说它正在工作时,那只是幸运,你可能没有看到崩溃,但你仍然在访问一些你没有分配的内存
关于c - C中声明的与未声明的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757562/