2.Call by address傳址 (與1.不同在一個裝"變數" 一個裝"地址")
ex:
void function (int *x, int *y); function(&a,&b); // or function(a,b); //相當於 int *x=&a; int *y=&b;3.Call by reference 傳參考 (取別名,但還是存取同樣空間)
ex:
void function (int &x, int &y); function (a,b); //相當於 int &x=a; int &y=b;
範例一、
int gint = 0; //全域變數 void changePtr (int *pInt) { pInt = &gint; //將全域變數放入 } void main () { int local_int = 1; int *localPtr = &local_int; changePtr (localPtr); //期望 printf ("%d\n", *localPtr); }
以上為2.的實現,printf出來的還是1,因為傳進去的地址放在另一個較pInt的變數裡,就 pInt 和 localPtr 來說,兩個是一樣的只是名子不同。所以說把 gint 的位置放入 pInt 影響不到 localPtr 。
範例二、
int gint = 0; void changePtr (int **pInt) { *pInt = &gint; } void main () { int local_int = 1; int *localPtr = &local_int; changePtr (&localPtr); printf ("%d\n", *localPtr); }
以上為利用雙指標指向存放的變數做修改所以輸出是0。
沒有留言:
張貼留言