在c++中参数的传递分为两种:“值传递”和“引用传递”。值传递不能改变参数的值,引用传递能改变参数的值。指针参数是值传递的一种情况,看似能改变参数的值,实际上能改变的是指针所指对象(不是参数)的值,真正的参数(指针,即地址)并没有改变。其实,不论是“传值”还是“传引用”,我们都可以将参数传递的过程看成是”给形参赋值“的过程,即: <类型> 形参a = 实参b。下面有三个例子:
例1:函数原型 void add(int a);
实参 int b=1;
函数调用 add(b);
传递过程 int a = b
效果: a和b是不同的对象,互不影响
例2:
函数原型 void add(int *a);
实参 int b=1;
函数调用 add(&b);
传递过程 int *a = &b
效果: a和b是不同的对象,互不影响;但是*a和*(&b)指向同一对象;
例3:
函数原型 void add(int &a);
实参 int b=1;
函数调用 add(b);
传递过程 int &a = b
效果: a是b的引用,表示同一个对象。更改a的值能更改b的值
在学习编程过程中,往往将形参a和实参b取相同的名字,这样可能将实参和形参搞混,不利于对函数参数传递过程的理解