C++入门书籍中介绍的不多,但是实际应用中很关键
本文先构建概念框架,然后用详尽的代码解释
#include <iostream>
using namespace std;
int c = 4;
int d = 5;
void fun1(int a,int b) //值传递
{
a = 3;
b = 3;
}
void fun2(int &a, int &b) //引用传递
{
a = 3;
b = 3;
}
void fun3(int *a, int *b) //指针传递
{
a = &c; //a改变了指针指向,而b只改变了指向的变量值
*b = 4; //产生了不同的结果
}
void fun4(int **a, int **b) //指针的指针传递
{
*a = &c; //这里改变了指针的指向,并对p1产生了影响
**b = 5;
}
void fun5(int *&a, int *&b) //指针的引用传递
{
a = &d; //这里改变了指针的指向,并对p1产生了影响
*b = 6;
}
void main()
{
int a = 1, b = 2;
int *p1 = &a;
int *p2 = &b;
fun1(a,b);
cout << a << b << endl;
fun2(a, b);
cout << a << b << endl;
fun3(&a, &b); //注意这里需要传入变量地址
cout << a << b << endl;
fun4(&p1, &p2); //因为参数是指针的指针,所以传入指针的地址
cout << a << b << endl;
cout << *p1 << *p2 << endl;
fun5(p1, p2); //因为参数是指针的引用,所以传入指针即可
cout << *p1 << *p2 << endl;
system("pause");
}
第20行与26、32行的区别很重要
结果验证了上面的结论,不难分析