函数返回指针|函数返回地址

来源:互联网 发布:中国光伏产业联盟数据 编辑:程序博客网 时间:2024/06/05 00:48
函数返回局部自动变量的地址是严重的错误。
但是我们可以返回动态分配的内存的地址,因为使用操作符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被破坏,因此根据返回的地址得不到结果。



0 0
原创粉丝点击