函数返回指针|函数返回地址
函数返回局部自动变量的地址是严重的错误。
但是我们可以返回动态分配的内存的地址,因为使用操作符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被破坏,因此根据返回的地址得不到结果。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 函数返回类型为指针类型时的一些问题
- 下一篇: 【C语言】返回指针的函数与指向函数的指针
