标题:
一道c的基本功题目
[打印本页]
作者:
kkting
时间:
2005-11-9 19:33
标题:
一道c的基本功题目
一道招聘新人用的题目,呵呵,大家来做做 阅读如下程序代码: inti; intnum[10]; for(i=1;i<=10;i++) num
= 0; printf("loop end."); 判断:程序的运行结果可以输出"loop end."吗?为什么?
作者:
shide0710
时间:
2005-11-9 20:46
标题:
一道c的基本功题目
绝对不能...........
作者:
kkting
时间:
2005-11-10 08:04
标题:
一道c的基本功题目
为什么不能,说理由嘛。。
作者:
笨鸟先飞
时间:
2005-11-10 11:02
标题:
一道c的基本功题目
是啊
我刚试了就是不能
可是为什么啊?
作者:
笨鸟先飞
时间:
2005-11-10 11:10
标题:
一道c的基本功题目
知道一点点了
因为数组第一个数因该是num[0]
当i=10 超出了数组的储存范围
我不知道说的对不对
请高手告诉我们这些小菜真正的原因
作者:
云端外
时间:
2005-11-10 11:33
标题:
一道c的基本功题目
同意楼上的i=10的时候就超出那个数组的长度了
作者:
云端外
时间:
2005-11-10 11:46
标题:
一道c的基本功题目
啊 不对 不是范围的问题 刚才我说的是错的
我觉得应该是这样的
intnum[10];说明了 这个数组的长度是10,下标应该从0到9,也就是说不会出现
num[10].所以后面的FOR循环也就不可能完成,那么程序就不可能运行到printf,
也就不会出现loop end
作者:
kkting
时间:
2005-11-10 12:16
标题:
一道c的基本功题目
大家继续发表意见,晚点我就把答案公布出来!
作者:
x86
时间:
2005-11-10 12:44
标题:
一道c的基本功题目
程序堆栈问题吧,先把i入栈,然后就是num数组的空间,因为是栈的缘故,num的地址要低于i的地址,也就是i的地址就在num的地址后面,访问num[10]的时候实际上就是访问的i,然后程序中num[10]=0,就使i变为0 了,,然后i=0,就满足了循环条件i<=10,然后继续运行,就造成了一个死循环...如果把代码改成: int num[10]; int i; for(i=1;i<=10;i++) {num
= 0; printf("%d:%d\n",i,num
); } printf("loop end."); 应该就可以执行printf了, 呵呵,我开始也没想到,i怎么会变成0 的...
作者:
kkting
时间:
2005-11-10 12:45
标题:
一道c的基本功题目
哈哈,还是x86厉害!
答案:不能输出,因为局部变量的分配方式采用的是栈方式。
当num
中i=10时,实际上num[10]和i的地址相同,对num[10]赋于0时,也使得i等于了0;
所以这个for循环是和死循环。
考察点:局部变量的分配方法。
作者:
云端外
时间:
2005-11-10 13:26
标题:
一道c的基本功题目
郁闷 白高兴了也
作者:
啄木鱼
时间:
2005-11-10 19:43
标题:
一道c的基本功题目
你可以高兴呀,因为我在斑主没有说之前,也产生了误判,呵呵,
作者:
bra83
时间:
2005-11-12 06:30
标题:
一道c的基本功题目
好像是不能,但又不知道为什么?
欢迎光临 黑色海岸线论坛 (http://bbs.thysea.com/)
Powered by Discuz! 7.2