|
- for (i=0;i<10;)
- {
- a[i++]=i;
- printf ("a[%d]=%d",i,a[i]);
- }
复制代码 这一段代码里面
第一次循环
i = 0,i < 10 进入循环体
a[0] = 0
i++ -> 产生side effect, i = i+1 = 1
下面打印的就是a[1]的值
这时候a[1]还没有被赋值,是个内存中随机的垃圾值
直到最后一次循环
a[9] = 9
i = i + 1 = 10
然后要求打印a[10],数组越界了,然后这个位置恰好可以访问,于是就打印出了一个垃圾值
也就是说,前9次循环,都是给a赋值,然后打印还没赋值的a[i+1]
最后一次打印了越界地址的垃圾值 |
|