为什么C/C++不能返回数组?

char* aa()
{
    char p[] = "sdf";
    return p;
}

int main(int argc, char const *argv[])
{
    char* n = aa();
    cout << n << endl;
}
int aa()
{
    int i = 3;
    return p;
}

int main(int argc, char const *argv[])
{
    int n = aa();
    cout << n << endl;
}

以上两个例子,第一个输出乱码,第二个正确的输出了3.也就是说,一个整数在函数中被返回了,而一个数组不能被返回。这是为什么呢?
网上翻了翻,具体的回答有两处
为什么C++不能返回数组?
C语言自定函数内定义一维数组,为什么不能将数组名作为返回值?

调用函数时,形参是以堆栈的形式保存的,返回时,系统会创建一个临时单元存放返回值,这个返回值通过调用函数赋给一个同类型的变量,而函数内部的变量因为生命周期已经完结,所以离开函数后,所有的临时变量都被释放了。
当函数返回一个指针时,这个指针也被存放在一个临时单元中,调用函数可将这个指针赋给相应的变量,问题是,这个指针所指向的内存单元是否在被调函数结束后仍然存在。


对于int,返回的只是一个值,如你上面,返回的只是3这个数字,与i无关

总结一下,两个都返回了,而且返回后作为局部变量都被释放了。
但整数我们返回接受了,而数据的首地址被返回后由于指向的内存被释放了所以没有意义了。

你可能感兴趣的:(c++)