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。
沒有留言:
張貼留言