函数返回引用和指针类型
2012-10-21 21:50
330 查看
函数返回引用和指针类型
#include <stdio.h>#include <stdlib.h>
#include <iostream.h>
char *g()
{
char p[]="heel";
return p;
}
void main()
{
char *str=g();
cout<<*str<<endl;
printf("printf\n");
cout<<*str<<endl;
}
结果如下:
h
printf
<这里是个乱码>
Press any key to continue
或者下面这样:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
char *g()
{
char p[]="heel";
return p;
}
void main()
{
char *str=g();
printf("%s\n", str);
}
结果也是乱码。
问题的解答:
以下摘自http://zhidao.baidu.com/question/156881190.html
首先局部变量在函数执行完后会被释放,这个毋庸置疑。问题出在系统什么时候会释放被调用的函数栈数据。 如果在没有任何函数被调用时,原来的函数栈还是被保留的,直到调用了新的函数,新的函数栈冲掉了原来的函数栈。 因此,函数返回指针后,必须在下一个函数中立即取出,不然就被冲洗掉了。
#include <stdio.h>
#include <stdlib.h>
double* big(double a,double b)
{
printf("&a = %x &b = %x\n", &a, &b);
double* c = ( (a > b) ? &a : & b);
printf("return %x \n", c);
return c;
}
double main()
{
double a = 3.9, b = 2.0;
printf("&a = %x &b = %x\n", &a, &b);
double* c = big(a,b);
double d = *c;
printf("printf ……\n");
printf("%f %x \n", *c, c);
printf("%f %x \n", *c, c);
printf("%f %x \n", d, &d);
return 0;
}
上面的程序中有printf("printf ……\n")这一句的话结果如下
没有printf("printf ……\n")这一句的话结果如下
其他几点:
函数退出时局部变量出栈,对象肯定是销毁了。销毁指的是将那块内存标为空闲供其它变量使用,而该内存上的值仍然存在。 【释放后那块内存并不是马上就被其他地方占用,根据实际情况起码会空闲一会,可能是一瞬间。如果你的程序较复杂,那这块内存可能很快就再次被使用,如果程序很简单,可能在很长一段时间内都是空闲。所以在函数返回后将变量的值马上赋值给另外一个变量,局部变量已经销毁了,这块内存上的值还没来得及被修改,所以你的外部变量获得了一个正确的值。所以你的结果正确并不代表变量没有被销毁。无论用引用还是变量来接受局部变量的值,局部变量肯定是已经销毁了的。】
相关文章推荐
- 对引用和指针使用以及函数返回引用和指针类型的理解
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
- 如果从函数中返回局部变量的地址,引用或者指针的形式,则变量类型必须是静态的或者常量,即不在栈中存储
- 函数的返回类型可以为值、指针、引用,这三种返回类型有什么不同,各有什么好处?(c++)
- c++中函数中变量内存分配以及返回指针、引用类型的思考
- 对引用和指针使用以及函数返回引用和指针类型的理解
- 对引用和指针使用以及函数返回引用和指针类型的理解
- c++中函数中变量内存分配以及返回指针、引用类型的思考
- 函数返回引用和指针类型
- 对引用和指针使用以及函数返回引用和指针类型的理解
- 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
- [Happy Coding] 函数返回数组指针和数组引用
- 函数返回值系列之一返回指针类型的局部变量
- const 类型的函数不能返回非const类型的引用
- typeid用于返回指针或引用所指对象的实际类型。
- Self Summary: C++函数返回引用和指针的问题,局部对象与new对象的问题
- 函数返回类型为指针类型的一些问题
- C++返回引用类型 指针的引用
- 极限研究-"&amp;"函数返回引用与返回普通类型的区别
- Asp 返回引用类型函数代码