c语言中一个关于指针与函数的问题 - 爱问答

(爱问答)

c语言中一个关于指针与函数的问题

直接上代码:

int *f1()

{

int z=5;

int *w=&z;

return w;

}


main()

{

int *p;

p=f1();

printf("%d ",*p);

system("pause");

return(0);

}

运行的结果是输出了“5”,那么问题来了:

指针p接收函数的返回值,应该是指向的形参z,但是函数结束后形参不是被释放了吗?为什么还能通过指针把形参正确输出?

这个原因很简单.

因你的程序是单线程/单任务

且在你p=f1();后,没有执行过其它任何程序

p指向的内存的值没有被改变,所以结果是正确的

若你再定义一个函数,如

int ttt()
{
int x[10],i;
for(i=0;i<10;i++)
 x[i]=i;
}

而你在

p=f1();

后面执行一下这个函数

...

p=f1();
ttt();
printf("%d ",*p);

....

你看下结果

若程序是多线程多任务的

况就更复杂,你最终的*p值就不得而知了

所以C指针是有完全性问题的,程序的某些BUG就是这样产生的


这个程序是有bug的

相关标签:c语言

下一篇:java自学好还是找相关培训班好呢

上一篇:分析下段程序,写出该段程序运行完成后,AX与BX的内容是多少?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?