为什么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无关

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值