我用C编写了一个简单的程序:
#include <stdio.h>
main(){
int a[20], b[20];
int n, i;
printf("Enter a number: ");
scanf("%d", &n);
for(int j=0; j<n; j++){
printf("Enter a number for a[%d]: ", j);
scanf("%d", a[j]);
printf("\n");
}
}
此代码编译但在n
大于2时运行,并且在向阵列输入第二个数字时发生了崩溃。
我并不感到沮丧,为什么它会崩溃,请向我解释。
答案 0 :(得分:5)
scanf
将指针带到存储值的位置。即a[j]
的地址。所以scanf("%d", &(a[j]) );
或scanf("%d", a+j);
(请注意,a[j]
相当于*(a+j)
)。
此外,还有其他各种问题。首先,它应该是c
还是c++
?目前它实际上并非如此(尽管它更接近c
)。如果有人进入大于20
的话,会发生什么?
如果你想知道造成崩溃的原因是什么,它会将a[j]
(这只是一些未初始化的垃圾)中的任何值解释为地址,然后尝试写入该(完全无效的)地址。它不喜欢这样,操作系统会杀死你的程序。这称为segmentation fault。