天天看点

C++中的指针与引用、如何参数传递

c++语言中,函数的参数和返回值的传递方式有3种:引用传递、指针传递和值传递。

1、引用传递

引用传递传递的是引用对象的内存地址。

引用传递的特点是:被调函数对形参的任何操作都会影响主调函数中的实参变量。

举例说明:

该函数的功能就是交换x和y。

2、指针传递

指针是用来控制对象的内存地址的,它指向单个对象的地址,除了void指针类型外,指针的数据类型与所指向地址的变量数据类型须保持一致。

指针传递只需交换地址即可,举例如下:

3、值传递

值传递是指将要传递的值作为一个副本传递。

在函数调用时,实参把它的值传递给对应的形参,方法执行中形参值不影响实参,即实参的值不会发生改变。即值传递的特点:被调函数对形参的任何操作都是作为局部变量进行的,不会更改主调函数的实参变量的值。

在此例子中,swap1输出的p和q分别是2,1,但是主函数中输出的值仍不变,分别为1和2。

4、引用传递、指针传递和值传递的区别与联系

(1)、值传递与引用的区别

值传递传递的是值的一个副本,函数对形参的操作不会影响实参的值;而引用传递传递的是引用对象的地址,函数的形参操作会直接影响实参的值,实参的值随着形参的值的改变而改变

(2)、指针与引用的区别

指针是一个实体,而引用是一个别名,指针可以为空,即空指针,但引用不能为空;

引用初始化时必须指向一个对象,之后不能变(但是对象其内容可变),而指针可变;

指针使用前须测试其合法性,防止为空,但引用不要测试其合法性;

引用无需解引用,但指针需要解引用;

sizeof引用得到的是所指对象的大小,而sizeof指针得到的是指针本身的大小,即对象地址的大小;

指针自增与引用自增意义不一样;

在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域等。

继续阅读