和数组有关的一个题,谢谢高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/09/22 01:18:43
main()
{ int n[2],i,j,k;

for(i=0;i<2;i++)
n[i]=0;
k=2;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
n[j]=n[i]+1;
printf("%d",n[k]);
getch();
}
结果是2,n[k]不是n[2]吗,怎么会是2呢?
我是用WIN-TC运行的,结果和书上的一样是2
这个是我从书上抄的

这道题的结果是无法估计的n[2]已经越界了 打印出来是什么数 要看编译器变量分配的地址了
我打印出来的结果是1245120

最后n[0]=n[1]=3

我给你解释一下为什么你会得出2把
Win-TC编译器分配变量的时候是顺序分配所以
int n[2],i,j,k; 这几个变量在内存里是连续的
n[2]实际上已经指向了i这个变量了 所以你打印出来结果是2

而我用的是vc 变量分配和tc不太一样所以越界后不一定指向i

所以最好不要越界读取 这个结果是和编译器有关系的~~~

你重复使用了两次i,而且整个代码写得有点乱(就是不知道是干什么的代码),而且最终结果还越出了界限(因为定义时n[2]代表里面只有两个元素,但是后面调用时再写n[2]则代表里面的第三个元素,但里面没有第三个元素)最好避免这样。