首页 > 电脑

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

更新时间2018-03-17 08:47:31

直接上代码:

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语言

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

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