【C语言基础】请问在两个地方声明为什么会有不一样的效果呢

img

img


方便在前面和循环中声明j,得到的结果截然不同,不知道原因是什么

你的第一张图片的for循环语句都是错的,当然结果不一样啦

你这个问题很有意思啊。我分析了一下,我觉得问题出在你的数组定义上,你只给数组分配了5个位置,而你在循环最后弄了个a[5]出来,这样,循环完了以后,必须要给a[5]重新分配位置,这个地方我也有些不明白了,这个时候a[5]实际上会占据j的位置,所以这个时候j=14,导致了下面的循环不会执行了。所以会输出allnum为0.

我还发现一个有意思的事情,如果你在循环之前输出一下j的地址,那么allnum就会输出正确的值了。a[5]就不会占据j的位置。我想这还是要非常注意变量的声明吧,变量的作用域也是要注意的。特别是for 循环。

我又分析了一下,感觉你这个问题就是数组越界了导致的,出现了意想不到的问题-----就是a[5]占据了j的位置。所以数组最好定义之初就要考虑好,千万不要越界,要么就不要定义固定大小的。