函数返回指针|函数返回地址
函数返回局部自动变量的地址是严重的错误。
但是我们可以返回动态分配的内存的地址,因为使用操作符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检查内存泄露