c11参数传递.cpp
#include <iostream>
using namespace std;
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
cout << "函数的a: " << a << endl;
cout << "函数的b: " << b << endl;
}
void swap2(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void swap3(int &a1, int &b1) // int &a1 = a; int &b1 = b;
{
// 3.引用传递
int temp = a1;
a1 = b1;
b1 = temp;
}
// 此法错误
// int& fun1()
// {
// int a = 10;//放在栈中,程序释放无法返回
// return a; // 返回局部变量的引用
// }
// 此法有static正确
int& fun2()
{
static int a = 10; // static静态 可以把变量的生命周期设置为和程序运行周期一样
return a; // 返回局部变量的引用
}
int main()
{
// int a = 10;
// int b = 20;
//swap1(a,b); // 值传递
// swap2(&a,&b); // 地址传递
// swap3(a,b); //引用传递
// int& a1 = a;
// cout << "a: " << a << endl;
// cout << "b: " << b << endl;
// 注意事项
// 1.引用必须是一块合法的内存空间 初始化时不能直接写数值
// int& a1 = 10; // 10是常量,不能写,报错
// 2.不要返回局部变量的引用
// int &ref = fun1(); // 报错
// cout << "ref:" << ref << endl;
int &ref = fun2();
cout << "ref: " << ref << endl;
// 3.函数返回值如果是引用,函数的调用可以作为左值出现
// int &ref = fun2(); // 把a起别名叫ref
// fun2() = 600; // a = 600;
// cout << "ref: " << ref << endl; // 600 因为a的别名是ref
return 0;
}