#include <iostream>
using namespace std;
//1、值传递
void mySwap01(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void test01()
{
int a = 10;
int b = 20;
mySwap01(a, b);
//值不变,因为在mySwap01函数中 改变的只是局部变量a b的值 并没有真正改变test01中a b的值
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
//2、地址传递
void mySwap02(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void test02()
{
int a = 10;
int b = 20;
mySwap02(&a, &b);
//将a b地址传入mySwap02中 直接改变了a b的值
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
//引用传递
void mySwap03(int&a, int&b)//int &a=a;int &b=b;
{
int temp = a;
a = b;
b = temp;
}
void test03()
{
int a = 10;
int b = 20;
mySwap03(a, b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
}
//引用的注意事项
//1、不要返回局部变量的引用
int& myFunc()
{
int a = 10;
return a;
}
void test04()
{
int& ret = myFunc();
cout << "ret=" << ret << endl;//编译器优化结果,保存住之前的数据,但是多次执行就失败了
cout << "ret=" << ret << endl;
cout << "ret=" << ret << endl;
cout << "ret=" << ret << endl;
}
//2、如果函数的返回值是一个引用,那么这个函数可以作为左值进行运算
int& myFunc2()
{
static int a = 10;//加了static 静态变量,再运行结束后 消失
return a;
}
void test05()
{
int& ret = myFunc2();
cout << "ret=" << ret << endl;
cout << "ret=" << ret << endl;
cout << "ret=" << ret << endl;
cout << "ret=" << ret << endl;
myFunc2() = 100;
}
int main()
{
test03();
return 0;
}
C++核心编程 05参数传递方式
最新推荐文章于 2024-06-11 20:37:13 发布