值传递
值传递,形参是实参的一份拷贝。
交换两个数
#include <iostream>
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 1, b = 2;
std::cout << "a = " << a << ", b = " << b << std::endl;
swap(a, b);
std::cout << "a = " << a << ", b = " << b << std::endl;
return 0;
}
结果:交换未成功
地址传递
地址传递,形参指向实参变量。
交换两个数
#include <iostream>
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 1, b = 2;
std::cout << "a = " << a << ", b = " << b << std::endl;
swap(&a, &b);
std::cout << "a = " << a << ", b = " << b << std::endl;
return 0;
}
结果:交换成功
引用传递
引用传递,形参是实参的别名,本质上是同一个东西。
交换两个数
#include <iostream>
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 1, b = 2;
std::cout << "a = " << a << ", b = " << b << std::endl;
swap(a, b);
std::cout << "a = " << a << ", b = " << b << std::endl;
return 0;
}
结果:交换成功
原理
总结
地址传递和引用传递可以在函数中修改到外部的变量。