回覆列表
  • 1 # 使用者7963735883815

    不理解指標,是因為有人教錯了你。

    有人告訴你,指標是“指向”某某某的,那就是誤導你,給你挖了個坑。初學者小心不要誤讀這“指向”二字。

    第一,“指標”通常用於儲存一個地址,這個地址的資料型別在定義指標變數時確定。

    舉個例子,做個比較:

    int a; //定義一個變數a,用於儲存一個int型別。

    int * b; //定義一個指標變數b,用於儲存一個地址,這個地址所儲存的資料應該是int型別。

    第二,是變數就應該可以賦值,指標變數也一樣。但一般不會給指標直接賦值一個數值,而是將其他變數的地址賦值給指標,或者其他指標的值賦值給這個指標。

    繼續上面的例子:

    b=&a; //把變數a的地址賦值給b。“&”操作是取變數的地址。

    繼續舉例:

    int * c; //我們又定義一個指標c

    c=b; //將b的值賦值給c,上面已經知道b是指標,它的值是a的地址,那麼現在c 的值和b一樣,也是個a的地址。

    第三,指標變數儲存的值,也就是地址是可以變的。

    舉個數組初始化的例子:

    int d[100];

    int * e;

    e=&d[0]; //e儲存了陣列d的第一個資料的地址

    for (int i=0; i<100; i++){

    *e = 0; //把該地址中的資料賦值0

    e++; //地址累加一次,也就是陣列中下一個資料的地址

    }

    指標和其他變數一樣,可以運算(一般是加減),也可以重新賦值。

    第四,指標有啥用。

    比方說,我們有個函式,如下:

    int add(int x){

    return (x+1); //把輸入的值加1並返回結果。

    }

    好了,應用的時候是這樣的:

    {

    int a=1;

    a=add(a); //add函式返回的是a+1

    //現在 a等於2

    }

    很簡單吧,就是把a都累加一次。

    用指標怎麼寫:

    void add(int *y){ //給入的是一個int指標,是一個地址。

    *y = *y + 1; //* 是指引用 這個地址所儲存的變數

    //這條語句的意思就是,把這個地址裡的值加1,然後放回這個地址。

    }

    把這個函式用起來:

    {

    int a=1;

    add(&a); //把a的地址傳到函數里

    //add函式,就是把a的值加1,再放回到變數a裡。

    //現在a等於2

    }

    試想一下,如果我們要對一個數據結構裡的資料進行處理,那是不是就該傳入這個結構的地址,在函式中依靠指標來引用這個地址的資料結構,進行運算。

    第五,若已有一個指標變數,可不可以用另外一個指標來儲存這個變數的地址呢。

    可以的。

    一個變數儲存另一個指標的地址,那它就是通常所說是“指標的指標”了。

    通常,指標的指標多用做(或指的是)函式指標或資料結構中有指標的情況。初學者搞不清,就不要勉強了。

    第六,空指標可怕嗎?

    我們知道,一個變數要賦值後才能用,指標也是一樣。指標不賦值(不給定地址)就拿來用,是不是也要出錯。這個就是空指標。一般把指標賦值為Null,就是表明這個指標是空的,不能用。所以程式中一定要經常判別指標不是Null才能用。

    最後,初學C語言,最好把複合的語句拆開來看,比較容易理解。像 int *a=&b; 這種,拆成

    int * a;

    a=&b;

    就好理解了。

  • 中秋節和大豐收的關聯?
  • 如何判斷美版iPhone x是否是無鎖機?