(1)用指针传递参数,可以实现对实参进行改变的目的,是因为传递过来的是实参的地址,因此使用*a实际上是取存储实参的内存单元里的数据,即是对实参进行改变,因此可以达到目的。在使用的过程中需要通过对地址的解引用来操作其所指向的变量,同时可以通过指针的自增自减移动从而改变所指向的值,灵活度较大。
(2)引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改.因而函数返回后作出的修改会依旧存在,引用传递可以节省复制所需要的时间和空间。
(3)对于二重指针的使用情况:对于链表和树或char*字符串时,这些本身就是指针类型,当需要通过形参带回变化后的结果时,又要使用指针作参数,所以使用二重指针作为形参。如果函数传参采用一级指针时,解引用时只能改变该指针指向的头或根结点,而不能影响整个链表或树这个结构。
定义链表结构时,LinkList(也就是LNode *)H代表的是整个链表,函数传址调用时,实参传递的是地址值。当采用二级指针形参LinkList *L(也就是LNode **)时,要传递链表的起始地址&H给形参L,而采用一级指针形参LNode *L时,传递的是头结点的地址&(*H)(也就是头指针H)。针对以上情况也可以使用指针的引用来代替二重指针,以下是分别用二重指针和指针引用作为形参的示例程序:#includeusing namespace std;void test(int **p) //以指针类型变量的地址作为形参{ int a=1; *p=&a; //*p作为一个指针变量存放的是变量a的地址 cout<<*p<<" "<<**p<
下面是利用形参为指针的引用的函数:
#includeusing namespace std;void test(int *&p){ int a=1; p=&a; cout< <<" "<<*p<
可以看出利用指针的引用相较二重指针达到了相同的功能,但比使用二重指针要简单明了(与一重指针相似)
【】