C语言关于局部变量的有关问题
C语言关于局部变量的问题
局部变量是在栈中分配并自动释放的,上面程序,f函数有两个局部变量i 和 p ,p记录了i的地址,并返回了,主函数中q接收了p的值同时也指向了i;但是我觉得既然此时f函数已经调用完毕,i的空间应该自动回收,q记录的只是一个未知的空间地址,*q并不能准确输出原来i的值,但是在vc6中却输出了i的正确值,不理解啊..
哪位帮帮忙,谢谢了
------解决方案--------------------
因为存储那个i变量的栈空间虽已被回收,但里面存储的值却还没有被更改。但这样的情况是不可依赖的,因为谁也不知道什么时候它会被改变。
------解决方案--------------------
不要返回临时变量的地址, 空间被回收, 但是还未再被利用, 此时,其值可能还是原来的值,但是再使用它,是不理智的。
操作系统只能对你会说:嘿,你踩了*了。
------解决方案--------------------
楼主自己运行一下试试吧,,也不多说什么,
- C/C++ code
#include<stdio.h> int * f() { int i = 5; int * p = &i; return p; } int main(void) { int * q = f(); printf("%d\n",*q); return 0; }
局部变量是在栈中分配并自动释放的,上面程序,f函数有两个局部变量i 和 p ,p记录了i的地址,并返回了,主函数中q接收了p的值同时也指向了i;但是我觉得既然此时f函数已经调用完毕,i的空间应该自动回收,q记录的只是一个未知的空间地址,*q并不能准确输出原来i的值,但是在vc6中却输出了i的正确值,不理解啊..
哪位帮帮忙,谢谢了
------解决方案--------------------
因为存储那个i变量的栈空间虽已被回收,但里面存储的值却还没有被更改。但这样的情况是不可依赖的,因为谁也不知道什么时候它会被改变。
------解决方案--------------------
不要返回临时变量的地址, 空间被回收, 但是还未再被利用, 此时,其值可能还是原来的值,但是再使用它,是不理智的。
操作系统只能对你会说:嘿,你踩了*了。
------解决方案--------------------
楼主自己运行一下试试吧,,也不多说什么,
- C/C++ code
#include <stdio.h> int * f() { int i = 5; int * p = &i; return p; } int main(void) { int * q = f(); printf("%d\n",*q); printf("%d", *q); return 0; }