返回列表 发帖

一道c的基本功题目

一道招聘新人用的题目,呵呵,大家来做做 阅读如下程序代码: inti; intnum[10]; for(i=1;i<=10;i++) num = 0; printf("loop end."); 判断:程序的运行结果可以输出"loop end."吗?为什么?

一道c的基本功题目

绝对不能...........

TOP

一道c的基本功题目

为什么不能,说理由嘛。。

TOP

一道c的基本功题目

是啊
我刚试了就是不能
可是为什么啊?

TOP

一道c的基本功题目

知道一点点了
因为数组第一个数因该是num[0]
当i=10 超出了数组的储存范围
我不知道说的对不对
请高手告诉我们这些小菜真正的原因

TOP

一道c的基本功题目

同意楼上的i=10的时候就超出那个数组的长度了

TOP

一道c的基本功题目

啊 不对 不是范围的问题 刚才我说的是错的
我觉得应该是这样的
intnum[10];说明了 这个数组的长度是10,下标应该从0到9,也就是说不会出现
num[10].所以后面的FOR循环也就不可能完成,那么程序就不可能运行到printf,
也就不会出现loop end

TOP

一道c的基本功题目

大家继续发表意见,晚点我就把答案公布出来!

TOP

一道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 的...

TOP

一道c的基本功题目

哈哈,还是x86厉害!
答案:不能输出,因为局部变量的分配方式采用的是栈方式。
当num中i=10时,实际上num[10]和i的地址相同,对num[10]赋于0时,也使得i等于了0;
所以这个for循环是和死循环。
考察点:局部变量的分配方法。

TOP

一道c的基本功题目

郁闷 白高兴了也

TOP

一道c的基本功题目

你可以高兴呀,因为我在斑主没有说之前,也产生了误判,呵呵,

TOP

一道c的基本功题目

好像是不能,但又不知道为什么?

TOP

返回列表 回复 发帖