先说明,在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;//这也是没有问题的
}
特别提示,动态内存的生存期有程序员自己决定。综上所述,能不能返回局部变量及其地址,主要看该变量在内存的存储位置,只要是在系统栈中存储的局部变量,统统不可以返回其地址,而在静态区/常量区或是堆区的变量,返回其地址是没有问题的,这是由变量的生存期决定的。

造一个分布式轮子
1 声望0 粉丝