值传递:形参是实参的拷贝,函数内部对形参的操作并不会影响到外部实参。
void solve(int a)
{
cout << a << endl;
cout << &a << endl;
a++;
cout << a << endl;;
}
int main()
{
int c = 1;
cout << &c << endl;
solve(c);
//实参值
cout << c << endl;
//实参地址
cout << &c << endl;
return 0;
}
运行结果:
指针传递:指针传递也是值传递的一种,形参是指向实参地址的指针,当对形参进程操作时,也就相当于对实参自身进行操作。
void solve1(int* a)
{
//形参值
cout << *a << endl;
//形参地址
cout << &a << endl;
//对形参操作
(*a)++;
cout << *a<<endl;
}
int main()
{
int c = 1;
cout << &c << endl;
solve1(&c);
//实参值
cout << c << endl;
//实参地址
cout << &c << endl;
return 0;
}
运行结果:
引用传递:引用传递,实际就是把引用对象地址放到开辟的栈空间,函数内部对形参的任何操作可以直接映射到外部实参。
void solve2(int& a)
{
cout << a<<endl;
cout << &a << endl;
a++;
cout << a << endl;
}
int main()
{
int c = 1;
cout << &c << endl;
solve2(c);
//实参值
cout << c << endl;
//实参地址
cout << &c << endl;
return 0;
}
运行结果: