首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

问大家一个超级简单的有关问题 return 局部变量

2012-09-20 
问大家一个超级简单的问题 return 局部变量例如:#include stdio.hint GetNum(){int b2return b}void

问大家一个超级简单的问题 return 局部变量
例如:
#include <stdio.h>


int GetNum()
{
int b=2;
return b;
}

void main()
{
   
int i=GetNum();
printf("%d \n",i);
 
}
能返回2,但这不是返回局部变量吗?在程序调用完GetNum()之后,局部变量b不就销毁了吗?
而这个函数
char *GetMemory( void )
{
char p[] = "hello world";
return p;
}
int GetNum()
{
int b=2;
return b;
}
void Test( void )
{
char *str = NULL;
str = GetMemory();
printf(str);

}
就是因为返回了局部变量而错,这是为什,么????求大家指点

[解决办法]
不是不能返回局部变量,是不能返回指向局部变量的指针和引用。
[解决办法]

探讨

不是不能返回局部变量,是不能返回指向局部变量的指针和引用。

[解决办法]
第一个程序,返回b的值,没有问题。程序会把b中的内容放到堆栈里面返回。虽然b销毁了,但是b里面的内容返回了。

第二个程序,p里面是指针,这个指针在函数里面分配,函数退出销毁,那么,这个时候,你返回p当然就出错了
[解决办法]
return b返回的是值,又不是内存块(&b的话就出错了)
第2种情况就是内存块,这样销毁的时候,指针悬挂就出错啦
[解决办法]
探讨
例如:
#include <stdio.h>


int GetNum()
{
int b=2;
return b;
}

void main()
{

int i=GetNum();
printf("%d \n",i);

}
能返回2,但这不是返回局部变量吗?在程序调用完GetNum()之后,局部变量b不就销毁了吗?
而这个函数
char *……

热点排行