各位大侠的讲解真让我这刚开学的小虾开眼界。
其实我真的很晕!!!
如边小白大侠说的定义变量的顺序不变。运行结果应是不变的。。我运行了很多次。都一样。
最后总结:程序分配内存 a[0] 到 a[9] 。再把首地址赋给指针变量 p 。再赋给变量 i 地址(address:0x0012FF78 )也就是a[10]。(其实a[10]并不存在。)
只是我认为a[10]在“掉坑里”了。scanf() 运行后 p 越界了,跑 a[9] 后面的地址上去了。也就是系统给变量 i 分配的地址上。其实就是 i 和a[10]共用的一个内存地址了(我这样理解。不知道这样理解对还是错)。如果 p++ 没去掉,那么自然是a[9]以后的十个单位内的垃圾值了。除非把指针 p 返回首位置。
其实我真的很晕!!!
如边小白大侠说的定义变量的顺序不变。运行结果应是不变的。。我运行了很多次。都一样。
最后总结:程序分配内存 a[0] 到 a[9] 。再把首地址赋给指针变量 p 。再赋给变量 i 地址(address:0x0012FF78 )也就是a[10]。(其实a[10]并不存在。)
只是我认为a[10]在“掉坑里”了。scanf() 运行后 p 越界了,跑 a[9] 后面的地址上去了。也就是系统给变量 i 分配的地址上。其实就是 i 和a[10]共用的一个内存地址了(我这样理解。不知道这样理解对还是错)。如果 p++ 没去掉,那么自然是a[9]以后的十个单位内的垃圾值了。除非把指针 p 返回首位置。