#includeusing namespace std; int Return1(int a)//形参是值拷贝 { a = a + 1; cout << a << endl; cout << (int)&a << endl; return a;//返回值也是值拷贝 } int main() { int b = 4; cout << b << endl; cout << (int)&b< ①的输出值为:
2、形参地址传递 且返回值-值传递
一共产生了3个地址不同的int类型变量int Return2(int& a)//形参是地址传递 { a = a + 1; cout << a << endl; cout << (int)&a << endl; return a;//返回值也是值传递 } int main() { int b = 4; cout << b << endl; cout << (int)&b << endl; int c = Return2(b);//① //int& c = Return2(b);//②非法操作 cout << c << endl; cout << (int)&c << endl; return 0; }①输出为:
一共产生了2个地址不同的int类型变量个人猜测:函数返回值在返回时也会生长一个临时变量,用于存储返回值的数值(网上的说法是会将其数值存放在寄存器中),这个临时变量会马上被销毁,用引用接收其地址时会很容易造成非法访问内存地址问题,所以在编译器层面直接将其定义为非法操作。
二、函数返回值的值传递与地址传递 1、返回值-值传递且形参值传递int& Return3(int a) { a = a + 1; cout << a << endl; cout << (int)&a << endl; return a; } int main3() { int b = 4; cout << b << endl; cout << (int)&b << endl; int c = Return3(b);//① //int& c = Return3(b);//② cout << c << endl; cout << (int)&c << endl; return 0; }①输出为
2、返回值地址传递且形参地址传递
一共产生3个地址不同的int类型的变量
②的输出为:
一共产生2个地址不同的int类型的变量int& Return4(int& a) { a = a + 1; cout << a << endl; cout << (int)&a << endl; return a; } int main() { int b = 4; cout << b << endl; cout << (int)&b << endl; int c = Return4(b);//① //int& c = Return4(b);/② cout << c << endl; cout << (int)&c << endl; return 0; }①输出为:
一共产生2个地址不同的int类型的变量②的输出为:
全程只有1个int类型的变量



