C中 * 、*&、 **、& 區別,以及什麼時候用

使用示例:

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++內容,表示引用,操作它即是在操作原對象,可看作傳入對象的別名,先理解&再理解*&。這個和取地址不一樣,概括爲 和類型在一起的是引用,和變量在一起的是取址。

*&

*&表示指針的引用,操作它即是在操作原指針,可看作傳入指針的別名。即可改變原指對象的值,又可改變原指針所指對象。

可擴展:C++中引用&與取地址&的區別分析

發佈了35 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章