标题:[转载]想象一下这个程序
取消只看楼主
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
结帖率:100%
 问题点数:0 回复次数:1 
[转载]想象一下这个程序
想象一下输出结果,不要用vc或者gcc试验哦!
面试的时候没有机器给你的




#include "stdio.h"

int *p = NULL;

int *fFun(void)
{
int i = 0;
return &i;
}

void subFun(void)
{
(*p)--;
}

void gFun(void)
{
int j;

for(j = 0;j<10;j++)
{
subFun();
printf("%d\n",j);
}
}


int main(void)
{
p = fFun();
gFun();
}
搜索更多相关主题的帖子: include return style 
2006-08-31 15:16
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

主要考察对栈的熟悉。转人家的解析:先调用fFun()函数,调用时首先会将函数返回地址入栈,然后会将i入栈。最后函数返回的是i的内存地址,而这片内存被赋为0,函数退出后相应的参数出栈。然后进入gFun()函数,同fFun()一样,首先会将函数返回地址入栈,然后会将j入栈。而j的地址正是先前i的内存地址,所以指针p指向的就是j,执行j--,接下来,就会导致无限循环了...
用vc或者gcc确实是死循环phG
在keil c中,如果选择是 nooverlap,那么i和j是不会在一个空间上。

2006-08-31 17:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-87191-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.524923 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved