1. 程式人生 > >c++基礎1:指標作為函式形參

c++基礎1:指標作為函式形參

指標作為函式形參傳入的應用非常廣泛,比如:陣列名字作為指標傳入等等.

指標作為形參傳入的一大好處就在於可以在函式內部改變指標指向的物件!!!注意,這裡的重點是指標指向的物件,而不是改變指標本身.

指標和應用作為形參傳入看似效果一樣:改變指向(引用)的值,但實際上是有著本質的差別!

1.指標作為形參傳入還是要經歷實參到形參的拷貝,相當於新建了一個指標變數,這個指標變數指向的是原來的地址.

2.引用作為形參傳入則無需拷貝,比較省時省力

具體的可以見下面的例子:

void pointer(int *p)
{
  int a = 11;
  printf("\n\nEnter function");
  printf("\nthe p is point to  %p , addr is %X, *p is %d",p , &p, *p);
  *p =11;
  printf("\nthe p is point to  %p , addr is %X, *p is %d",p , &p, *p);
  p = &a;
  printf("\nthe p is point to  %p , addr is %X, *p is %d",p , &p, *p);

  printf("\nfunction return\n");
}

int main()
{
 int b =22;
 int *p = &b;

 printf("the b address %X\n",&b);
 printf("the p is point to %p , addr is %X, *p is %d",p , &p, *p);
 pointer(p);
 printf("\nthe p is  point to %p , addr is %X, *p is %d\n",p , &p, *p);
}

執行結果:

the b address 28FF3C
the p is point to 0028FF3C , addr is 28FF38, *p is 22

Enter function
the p is point to  0028FF3C , addr is 28FF20, *p is 22
the p is point to  0028FF3C , addr is 28FF20, *p is 11
the p is point to  0028FF0C , addr is 28FF20, *p is 11
function return

the p is  point to 0028FF3C , addr is 28FF38, *p is 11

這說明,在進入函式後,我們新建了一個指標.

因此,在二叉樹插入,連結串列插入的時候,如果使用一重指標作為引數,那麼必須有返回值,否則無法改變頭結點的指向(也就是外側指標的地址).

相對應的,如果沒有返回值的話,需要使用二重指標來改變頭結點指標的指向.此時二重指標本身的地址無法改變,但其指向的內容(頭結點指標的地址)是可以改變的!!

例子可以參見我的另一篇部落格點選開啟連結