读书人

C语言关于局部变量的有关问题

发布时间: 2012-05-15 14:35:29 作者: rapoo

C语言关于局部变量的问题

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;} 

读书人网 >C语言

热点推荐