c++中可以将引用作为返回值,比如下面这个函数
int &c() {
int a = 2;
cout << "a的地址为:" << &a << endl;
return a;
}
局部变量a的地址会被返回,但是局部变量a的内存空间会被释放。
int main()
{
int *p;
p = &c();
cout << "p的内容为:" << p << endl;
cout << "p指向的内容为:"<<hex<<*p << endl;
return 0;
}
运行结果:

如果想要a的内存空间不被释放,那么可以将a写作全局变量或者作为引用值传入函数。
int a;
int &c() {
a = 2;
cout << "a的地址为:" << &a << endl;
return a;
}
int main()
{
int *p;
p = &c();
cout << "p的内容为:" << p << endl;
cout << "p指向的内容为:"<<hex<<*p << endl;
return 0;
}
运行结果:

int &c(int &a) {
a = 2;
cout << "a的地址为:" << &a << endl;
return a;
}
int main()
{
//Huffman h;
//h.show();
int *p;
int a;
p = &c(a);
cout << "p的内容为:" << p << endl;
cout << "p指向的内容为:"<<hex<<*p << endl;
return 0;
}
结果同上。
本文探讨了C++中将局部变量的引用作为函数返回值的常见错误,并提供了正确的实践方法,包括使用全局变量和传递引用参数。通过对比不同场景下的代码示例,解释了为何直接返回局部变量引用会导致未定义行为。
3030





