C++函数返回局部变量

1. 不可返回的局部变量

1.1 函数不能返回指向栈内存的指针

【示例】:

int * get()
{
    int a = 10; // 属于局部变量,存储在栈中,在函数结束后,内存被释放,函数返回的指向a的内容也不确定
    return &a;
}
// 或
char *GetMemory(void)
 {
     char p[] = "hello world!"; // p是一个数组名,属于局部变量
     return p;
 }

2 可返回的局部变量

2.1 返回局部变量本身

【示例】:

int sum(int a, int b)
{
    int s = a + b; // 
    return s;
}

2.2 常量

【常量】

char *GetMemory(void)
{
    char *p = "hello world!"; // 字符串常量,,不能p[1]=‘a’. 常量不能修改。hello world是const char *
    return p; //函数返回p存储的地址
}

2.3 静态局部变量

【示例】:

const char *GetMemory(void)
{
    static char p[] = "hello world!";
    return p;// 改为静态变量,存储在静态存储区,在程序结束后释放
}

或者
int* returnValue()
{
    static int value[3]={1,2,3};
    return value;
}

2.4 堆内存中的局部变量

【示例】:

int *sum(int a, int b)
{
    int *s=new int();
    *s=a+b;
    return s;
}

2.5 返回值为值类型的函数

【示例】:

int func()
{
    return 1;
}
int i = func();
//有一个临时对象来保存func()函数的返回值1,之后将临时对象的值赋给i。
//编译器将所有的临时对象自动成为const。所以,对于返回值为值类型的函数,其返回值func()为右值。

2.6 返回值为引用类型的函数

当函数的返回值是引用类型时,其返回值即为返回的变量,不需要临时对象保存其返回值。所以,对于返回值为引用类型的函数,其返回值为左值。
【示例】:

int &sum(int a, int b)
{
    int s = a+b;
    return s;
}

原文链接: https://www.cnblogs.com/vivian187/p/12698438.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++函数返回局部变量

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/195910

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:06
下一篇 2023年2月12日 下午7:06

相关推荐