目录
- 一、程序及输出
- 1.1 值传递
- 1.2 地址传递
- 1.3 引用传递
- 1.5 引用注意事项
- 1.5.1 引用必须引一块合法内存空间
- 1.5.2 不要返回局部变量的引用
- 1.5.3 当函数返回值是引用,那么函数的调用可以作为左值
- 二、分析与总结
一、程序及输出
1.1 值传递
#include<iostream>
using namespace std;
//1、值传递
void mySwap01(int a , int b)
{
int temp = a;
a = b;
b = temp;
cout << "::a = " << a << endl;
cout << "::b = " << b << endl;
}
void test01()
{
int a = 10;
int b = 20;
mySwap01(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.2 地址传递
#include<iostream>
using namespace std;
void mySwap02(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void test01()
{
int a = 10;
int b = 20;
mySwap02(&a, &b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.3 引用传递
#include<iostream>
using namespace std;
void mySwap03(int &a , int &b) // int &a = a; int &b = b;
{
int temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
mySwap03(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.5 引用注意事项
1.5.1 引用必须引一块合法内存空间
在这里,10 是一个字面常量,它是一个右值,而非常量引用需要绑定到一个左值,即一个具有内存地址的对象。因此,将非常量引用绑定到一个字面常量是不允许的。
1.5.2 不要返回局部变量的引用
#include<iostream>
using namespace std;
int& func()
{
int a = 10;
return a;
}
void test02()
{
//2、不要返回局部变量的引用
int &ref = func();
cout << "ref = " << ref << endl; //第一次会做保留,第二次被释放,会出现乱码
cout << "ref = " << ref << endl;
}
int main(){
test02();
system("pause");
return EXIT_SUCCESS;
}
输出:
1.5.3 当函数返回值是引用,那么函数的调用可以作为左值
#include<iostream>
using namespace std;
int& func2()
{
static int a = 10;
return a;
}
void test03()
{
int &ref = func2();
cout << "ref = " << ref << endl;
//当函数返回值是引用,那么函数的调用可以作为左值
func2() = 1000;
cout << "ref = " << ref << endl;
}
int main(){
test03();
system("pause");
return EXIT_SUCCESS;
}
输出:
二、分析与总结
值传递
: 值传递适用于不需要修改实参的情况地址传递
: 地址传递适用于需要修改实参且需要节省内存的情况引用传递
: 引用传递则是一种更加直观且方便的方式来实现参数的传递和修改引用注意事项
①引用必须引一块合法内存空间
②不要返回局部变量的引用
③当函数返回值是引用,那么函数的调用可以作为左值