函数返回指针|函数返回地址
函数返回局部自动变量的地址是严重的错误。
但是我们可以返回动态分配的内存的地址,因为使用操作符new分配的动态内存一直存在,
直到被delete销毁或者程序结束,不受函数作用域的影响。
#include <iostream>
using namespace std;
double* treble(double);
char* fun1();
char* fun2();
int main(){
double* ptr(nullptr);
ptr = treble(5.0);
cout << "Result = " << *ptr << endl;
delete ptr; //释放为result动态分配的内存
ptr = 0;
cout << "_fun1() = " << fun1() << endl;
cout << "_fun2() = " << fun2() << endl;
system("pause");
return 0;
}
double* treble(double data){
double* result = new double(0.0);
// double* result(nullptr); //错误
double num = 4;
result = #
*result = 3.0 * data;
return result;
}
char* fun1(){
char* str = "12345";
cout << " fun1() = " << str << endl;
return str;
}
char* fun2(){
char str[] = "12345";
cout << " fun2() = " << str << endl;
return str;
} 函数fun1()中常量字符串"12345"的地址赋给str,因此str的值是字符串的地址。而str是局部变量,函数返回值时,变量str被破坏,但是常量字符串并没有被破坏,
因此根据返回的地址可以找到字符串。
函数fun2()中常量字符串"12345"赋给了数组str,str的值是数组str的地址。
而str是局部变量,函数返回值时,变量str被破坏,因此根据返回的地址得不到结果。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇: VS2010检查内存泄露
