C/C++学习之路(三)C++关于返回局部变量的问题

先说明,在C/C++中,程序的局部变量存储在栈中,在函数运行结束后,系统栈中的内容会被释放,此时若是返回局部变量的值,那么不会有任何问题,但若是返回地址,就有可能会出现问题。
若是必定要返回地址,那么如下是一些可能出现的状况:
一.存储在常量区的内容能够被返回
char *myfunc()
{
    char *p="aaaaa";
    return p;//这样是能够的,由于字符串常量存储在常量区
    //存储位置相似于static成员,在程序运行结束后不会被销毁
}

char *myfunc2()
{
    char p[]="aaaaa";
    return p;//这样不行,由于p指向的空间的内容已经被释放
}
二.static能够被返回
char *myfunc3()
{
    static char p[]="aaaaa";
    return p;//这样是能够的,由于p指向的内容存储在常量区
}
三.返回一个值必定是没问题的
char myfunc4()
{
    int a=5;
    retutn a;//返回一个值是没问题的
}
四.返回指向堆的指针也是没问题
node *myfunc5()
{
    node* head = new Node;
    head->data = 5;
    head->next = nullptr;
    return head;//这也是没有问题的
}
特别提示,动态内存的生存期有程序员本身决定。综上所述,能不能返回局部变量及其地址,主要看该变量在内存的存储位置,只要是在系统栈中存储的局部变量,通通不能够返回其地址,而在静态区/常量区或是堆区的变量,返回其地址是没有问题的,这是由变量的生存期决定的。
相关文章
相关标签/搜索