徹底搞定C語言指標 第二篇

來源:互聯網
上載者:User

二、指標是什麼東西

想說弄懂你不容易啊!我們許多初學指標的人都要這樣的感慨。我常常在思索它,為什麼呢?其實生活中處處都有指標。我們也處處在使用它。有了它我們的生活才更加方便 了。沒有指標,那生活才不方便。不信?你看下面的例子。

這是一個生活中的例子:比如說你要 我借給你一本書,我到了你宿舍,但是你人不在宿舍,於是我把書放在你的2層3號的書架上,並寫了一 張紙條放在你的桌上。紙條上寫著:你要的書在第2層3號的書架上。當你回來時,看到這張紙條。你就 知道了我借與你的書放在哪了。你想想看,這張紙條的作用,紙條本身不是書,它上面也沒有放著書。 那麼你又如何知道書的位置呢?因為紙條上寫著書的位置嘛!其實這張紙條就是一個指標了。它上面的 內容不是書本身,而是書的地址,你通過紙條這個指標找到了我借給你的本書。

那麼我們C,C++ 中的指標又是什麼呢?請繼續跟我來吧,看下面看一個申明一整型指標變數的語句如下:

int * pi;

pi是一個指標,當然我們知道啦,但是這樣說,你就以為pi一定是個多麼特別的東西了。其 實,它也只過是一個變數而已。與上一篇中說的變數並沒有實質的區別。不信你看下面圖。

記憶體 地址→6     7   8      9     10     11      12     13      14

--------------------------------------------------------------

...|    30      |  ‘t’ |      |      |      |      |       |      |……

--------------------------------------------------- -----------

變數 |→i   ←|→a   ←|       |→ pi       ←|

(說明:這裡我假設了指標只佔2個位元組寬度,實際上在32位系統中,指標的寬度 是4個位元組寬的,即32位。)由圖示中可以看出,我們使用int *Pi申明指標變數; 其實是在記憶體的某處 申明一個一定寬度的記憶體空間,並把它命名為Pi.你能在圖中看出pi與前面的i,a 變數有什麼本質區別 嗎,沒有,當然沒有!pi也只不過是一個變數而已嘛!那麼它又為什麼會被稱為指標?關鍵是我們要讓 這個變數所儲存的內容是什麼。現在我要讓pi成為真正有意義上的指標。請接著看下面語句:

pi=&i;

你應該知道 &i是什麼意思吧!再次提醒你啦:這是返回i變數的地址編 號。整句的意思就是把i地址的編號賦值給pi,也就是你在pi上寫上i的地址編號。結果如下圖所示:

記憶體位址→6     7   8   9   10     11    12     13     14

------------------------------------------------------------------

...|      30      |  ‘t’  |      |      |     6      |       |      |……

----------------------------------------------- -------------------

變數 |→i   ←|→a    ←|       |→ pi     ←|

你看,執行完pi=&i;後,在圖示中的系統中,pi的值是6.這 個6就是i變數的地址編號,這樣pi就指向了變數i了。你看,pi與那張紙條有什麼區別?pi不就是那張紙 條嘛!上面寫著i的地址,而i就是那個本書。你現在看懂了嗎?因此,我們就把pi稱為指標。所以你要 記住,指標變數所存的內容就是記憶體的地址編號!好了,現在我們就可以通過這個指標pi來訪問到i這個 變數了,不是嗎?。看下面語句:

printf(“%d”,*pi);

那麼*pi什麼意 思呢?你只要這樣讀它:pi內容所指的地址的內容(嘻嘻,看上去好像在繞口令了),就pi這張“ 紙條”上所寫的位置上的那本 “書”——i .你看,Pi內容是6,也就是說 pi指向記憶體編號為6的地址。*pi嘛!就是它所指地址的內容,即地址編號6上的內容了。當然就是30的值 了。所以這條語句會在螢幕上顯示30.也就是說printf(“%d”,*pi);語句等價於printf ( “%d”, i ) ,請結合上圖好好體會吧!各位還有什麼疑問,可以發Email: yyf977@163.com.

到此為止,你掌握了類似&i , *pi寫法的含義和相關操作嗎。總的一句話 ,我們的紙條就是我們的指標,同樣我們的pi也就是我們的紙條!剩下的就是我們如何應用這張紙條了 。最後我給你一道題:

程式如下

char  a,*pa
a=10
pa=&a
*pa=20
printf( “%d”, a)

你能直接看出輸出的結果是什麼嗎?如 果你能,我想本篇的目的就達到了。好了,就說到這了。Happy to Study!在下篇中我將談談“指 針的指標”即對int * * ppa;中ppa 的理解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.