C指標解析 ------ 運算子&和*

來源:互聯網
上載者:User

標籤:運算子和

          本文是自己學習所做筆記,歡迎轉載,但請註明出處:http://blog.csdn.net/jesson20121020

       

        & 是取地址運算子,* 叫做指標運算子或間接運算子。&a 的運算結果是一個指標,指標的類型是a的類型加上*,指標所指向的類型是a的類型,指標的值也就是指標所指向的記憶體區就是a的地址。 *p的運算結果就多了,總之,*p的結果是p所指向的東西,這個東西有這些特點: 它的類型是p所指向的類型,它所佔用的地址是p所指向的地址。

         看下面的例子:

int a = 5;

int b;

int *p;

int **q;

p = &a;          //&a的結果是一個指標,類型為int*,指向的類型為int,指向的地址是a的地址。

         *p = 10;         //*p的結果,在這裡它的類型是int,它所佔用的地址就是p所指向的地址,也就是a的地址。顯然這裡的*p就是變數a,這句代碼的實質就是為a重新賦值。

          q = &p;          //&p的結果是一個指標,類型為p的類型加上*,在這裡是int **。該指標所指向的類型為p的類型,這裡就是int*。該指標所指向的地址就是指標p的地址。

          *q = &b;         // *q是一個指標,&b的結果也就是個指標,且這兩個指標的類型和所指向的類型是一樣的,所以這句代碼的意思就是為*q賦值。

           **q = 34;       // *q的結果是q所指向的東西,在這裡是一個指標即int*,而對這個指標再做一次*運算,結果就是一個int型的變數了,它所佔用的地址就是*q所指向的地址,也就是b的地址,所以這句的目的就是給變數b賦值。

          最後,可以驗證下:

#include <stdio.h>int main(){int a = 5;    int b;    int *p;    int **q;    printf("a = %d\n",a);    p = &a;            *p = 10;    printf("a = %d\n",a);           q = &p;           *q = &b;             **q = 34;     printf("b = %d\n",b);}
         結果:

a = 5a = 10b = 34

         總之,要理解這兩個運算子,需要把握住兩個運算的結果的類型和所指向的類型。

         


C指標解析 ------ 運算子&和*

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.