使用示例:
void foo1(int * ptr){
*ptr = 1;
ptr = NULL; //不會改變原指針所指向的對象
}
void foo2(int *& ptr){
*ptr = 2;
// ptr = NULL; 會改變原指針所指向的對象
}
void foo3(int** ptr)
{
// *ptr = 3; 指針不能這樣直接賦值
**ptr = 3;
// *ptr = NULL; 會改變原指針所指向的對象
}
void foo4(int &e){
e = 5;
}
int main()
{
int *t,a = 1;
int b = 2;
t = &a;
printf("t:%d\n",*t);
foo1(t);
printf("foo1:%d\n",*t);
foo2(t);
printf("foo2:%d\n",*t);
foo3(&t);
printf("foo3:%d\n",*t);
printf("\n");
printf(“b:%d\n",b);
foo4(b);
printf(“b:%d\n",b);
return 0;
}
運行結果:
t:1
foo1:1
foo2:2
foo3:3
b:2
b:5
總結:
注意區分 指針所指向的對象 和 指針所指向的對象的值,上面幾個方法均可改變指針所指向的對象的值,但一定能改變指針所指向的對象(即不一定能改變指針箭頭所指的方向)。
*
指針的變量,傳入的只是地址值,不能改變原指針所指地址。只想改變所指對象值時使用。
**
指向指針的指針,純C內容,功能和*&一樣,使用較麻煩。
&
&是C++內容,表示引用,操作它即是在操作原對象,可看作傳入對象的別名,先理解&再理解*&。這個和取地址不一樣,概括爲 和類型在一起的是引用,和變量在一起的是取址。
*&
*&表示指針的引用,操作它即是在操作原指針,可看作傳入指針的別名。即可改變原指對象的值,又可改變原指針所指對象。