C++中值类型形参、指针类型形参和引用形参的探讨

Void func1(int a)

{

       a++;

       cout<<a;

}

 

Void func2(int *a)

{

       Int c = *a;

       Cout<<c;

}

 

Void func3(int *&a)

{

       Int *c;

       C=a //这里大家会不会想,形参接收的是int类型指针实参的引用,而不是实参的值。如果这样理解,是说不过去的,如果函数的原型定义成func3(int &a),形参变成了这样,但在函数中我们还是用操作int变量的方式去操作这个形参,而不是用一个指针变量来接住这个值,再通过*来取值,为什么可以这样,原因是编译器规定的就是这样。虽然操作的方法一样,但总有些不同吧,要不&岂不是多余的了?

       如果不带&,那么形参会将自己里面存的值复制一份存给形参,这时候无论形参怎么改变都不会影响到实参。

       如果带&,那么实参会将变量的引用传给形参,而不是将值传给形参。这个时候,形参和实参实际是上同一个东西,他们相互影响相互作用。

到这里自然,还是有人会问,既然传过来的是引用,为什么在被掉函数中不用操作引用的方式来操作形参,而还是用操作int类型变量的方式来操作形参呢?应该样解析?首先,这是编译器或者说语言对程序员的照顾吧。接着,转过来,有&和无&的目的是为了区分到底是直接操作原始数据还是要操作原始数据副本的问题。在被掉函数中可以忽视掉&,定义的时候根据需要取舍即可。

}

 

//首先自己分清指针,和指针变量,

Void main()

{

       Int a=3;    //a是一个int 类型的变量,里面的值是3。

       Func1(a);   //形参也是int类型的变量,形参会传什么过来?是a变量还是,a变量中的值?鬼都知道传的是a的值:3。

       所以,形参和实参必须是相同类型的,这样形参才能接住实参的值。实质就是将形参的值,copy一份,从一个容器(实参)放到另一个容器(形参)中。 

 

       Int *b;

       b = &a;    //实参b是一个int类型的指针变量,装的是a变量的指针。

       func2(b);   //形参当然也是int 类型的指针变量,直接将b传过来可能吗,来也装不住啊,它只能装b中的内容也就是a变量的指针。

       Func3(b);

}

原文地址:https://www.cnblogs.com/Ellfelo/p/refpointer.html