首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学者什么都不会 求求指点【闷绝,抓狂,苦恼】

2012-08-16 
菜鸟什么都不会 求求指点【闷绝,抓狂,苦恼】谨以第一行感谢帮助过我的每一个人,好人一生平安,合家幸福,身体

菜鸟什么都不会 求求指点【闷绝,抓狂,苦恼】
谨以第一行感谢帮助过我的每一个人,好人一生平安,合家幸福,身体健康,家中老小怡然和谐。
-----------------------------------------------------------

找错:

int a[1];
int * p;
for (p=&a[0];p<&a[1])
*++p=0;

书上答案是2个错
1: a[0]未被清0 --这个我能理解
2: 越界,空指针,死循环。 --这个疑惑


没能理解到的:先不说死循环,null指针。我怎么老是看不出这个程序会越界呢?
判断表达式p<&a[1]
循环语句:*++p=0;
执行步骤:
1:p=&a[0]
2:p<&a[1] 成立
3:*++p=0;意味着p=&a[1];a[1]=0;
4:p<&a[1] 此刻p指向a[1] 他们相等 于是程序终止 无法进入下一步*++p=0
所以我觉得不管是前自增还是后自增 既然不执行*++p=0,那么指针的变动就会终止于a[1],怎么可能越界呢?

by the way,for的一个循环结束与否是根据括号内“调整部分表达式”(就是i++那个)来断定的,象这个题,它直接省去调整部分表达式,作何解,虽然控制语句里有个调整的运算符,但是标志一次循环结束的节点是那个控制语句里面吗?

贴原题目图:




我的分析图,由于不让大家视觉疲劳只贴地址(毕竟是错的分析,只是我的思路,看出我究竟错在哪一个节点上)
http://img.my.csdn.net/uploads/201207/07/1341632389_6711.png.thumb.jpg
http://img.my.csdn.net/uploads/201207/07/1341632389_6910.png.thumb.jpg



[解决办法]
3:*++p=0;意味着p=&a[1];a[1]=0;// 这里就错误了, a[1]是没有空间给你存的,只能存a[0];
int a[1]; 只能存一个元素下标从0开始

热点排行