栈区的数据在函数执行完就被系统释放,所以不能返回其中的数据地址,但为什么能返回数据的值。比如我在函数中定义了数据“a”,最后return &a不合理,return a却合理,这是为什么?
有复制啊,看一下反汇编就知道了。
return &a还是return a合理要看函数的返回值类型是什么,这个类型要与return后面的类型一致。
a的值会先放到寄存器里,a空间销毁,return从寄存器拿值,然后再把寄存器里的值拿走,寄存器在CPU上,是硬件,比内存要快一点,小一点
这不废话吗,你想想,这两个能一样?
int func()
{
int a=10;
return a;
}
int& func2()
{
int a=10;
return a;
}