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的
热门标签: