函式中的形參問題(指標形參、引用形參、二重指標作為形參)
(2)引用作為函式引數進行傳遞時,實質上傳遞的是實參本身,即傳遞進來的不是實參的一個拷貝,因此對形參的修改其實是對實參的修改.因而函式返回後作出的修改會依舊存在,引用傳遞可以節省複製所需要的時間和空間。
(3)對於二重指標的使用情況:對於連結串列和樹或char*字串時,這些本身就是指標型別,當需要通過形參帶回變化後的結果時,又要使用指標作引數,所以使用二重指標作為形參。如果函式傳參採用一級指標時,解引用時只能改變該指標指向的頭或根結點,而不能影響整個連結串列或樹這個結構。
定義連結串列結構時,LinkList(也就是LNode *)H代表的是整個連結串列,函式傳址
針對以上情況也可以使用指標的引用來代替二重指標,以下是分別用二重指標和指標引用作為形參的示例程式:
#include<iostream>
using namespace std;
void test(int **p) //以指標型別變數的地址作為形參
{
int a=1;
*p=&a; //*p作為一個指標變數存放的是變數a的地址
cout<<*p<<" "<<**p<<endl;
}
int main(void)
{
int *p=NULL; //定義指標型別的變數p
test(&p); //通過指標地址作為形參傳遞改變了指標p的內容
if(p==NULL)
cout<<"指標p為NULL"<<endl;
system("pause");
return 0;
}
下面是利用形參為指標的引用的函式:
#include<iostream>
using namespace std;
void test(int *&p)
{
int a=1;
p=&a;
cout<<p<<" "<<*p<<endl;
}
int main(void)
{
int *p=NULL;
test(p);
if(p==NULL)
cout<<"指標p為NULL"<<endl;
else
cout<<p<<" "<<*p<<endl;
system("pause");
return 0;
}
可以看出利用指標的引用相較二重指標達到了相同的功能,但比使用二重指標要簡單明瞭(與一重指標相似)