指標,揭開你的蓋頭來(一)

來源:互聯網
上載者:User

指標,揭開你的蓋頭來

指標是C/C++語言的靈魂設計,我一直這麼認為,沒有哪一種語言在指標功能的設計上能有C/C++這麼靈活強大,甚至大多數語言根本就是避而不敢提指標。指標在應用上確實難以操作,但是它強大的功能支援和良好的運行效能猶如甘美的瓊漿吸引著多少程式員為之趨之若鶩、奮不顧身。不可否認,指標曾經是多少程式員的噩夢,但同時又是多少程式員的天堂。他們為之輾轉反側、百思不得其解,同時他們又因之披荊斬棘終攀理想的殿堂。

在C/C++之後的進階語言中,基本都屏蔽了指標的支援,這是為了讓程式對程式員來說更容易完成。語言發展的特點是讓語言本身更接近人類思維,而不是電腦“思維”。進階語言的宗旨是讓程式員更專註於高層應用的開發,解決高層的業務需求而不是與電腦“糾纏不休”。所以指標在C/C++之後的語言中都是很少應用。但這並不意味著指標是不好的東西,我們甚至在全球的任何C/C++代碼中都找不到一塊代碼是不使用指標的。指標是如此的重要,它是讓C/C++連續幾十年來在語言熱門排行榜都獨領風騷的幕後功臣。指標讓C/C++在程式界“大小通吃”,它可以毫不費力地與電腦互動,又可以完成高層的商業邏輯,甚至我們使用的大多數軟體都是用C/C++來開發的。在語言界沒有誰敢與之爭鋒,幾十年來它如同君臨天下般高臥語言界的至尊龍椅。

指標是如此的重要。在應用C/C++編程時不可避免地要使用到指標,我們要對指標寄以極高的期望,同時也要有足夠的警惕。它可以讓你的程式啟動並執行如駿馬平治般流暢,同時也可以讓電話鈴聲將你從淩晨3點鐘的美夢中驚醒。那如何才能運用好指標,我想只有一條,那就是:徹底地瞭解指標,徹底地掌握指標!從現在開始那我們就一起乘坐“飛飛魚”進入探索指標的夢幻之旅!

 

從記憶體開始

為什麼從記憶體開始?因為指標的本質是與記憶體密切相關的。瞭解記憶體則很容易瞭解指標。

記憶體,我們可以看作是一條長長的不計其數的資料的集合,這是一個形象的比喻,實際上電腦的記憶體是由數以億計的位(bit)順序地組合而成,每個位則儲存一個值:0或1。電腦儲存資料的原理就是這樣,它是以二進位的方式儲存資料。由於一個位所能表示的值的範圍實在有限,所以單獨的位的作用不大,通常我們將許多位組合一起作為一個單位,這樣以二進位的方式就能儲存較大範圍的值。

我們將位的最小組合稱作位元組。在多數的電腦中,每個位元組包含8個位,可以儲存無符號值0到255或有符號值-128到127。每個位元組在記憶體中都佔有一個位置,這個位置叫做記憶體位址,每個位元組都可以通過地址來標識和訪問。

當然,用位元組來儲存我們需要的資料還是太小。為了儲存更大的數值,我們把兩個或多個位元組組合在一起作為一個更大的儲存單位。這個儲存單位在語言中稱作資料類型。在C++中short類型用2個位元組共16個位來儲存,int類型用4個位元組共32個位來儲存。

我們說一個位元組在記憶體中都佔用一個獨一無二的地址,那麼多位元組的資料在記憶體中如何儲存和標識呢?在我們使用的電腦中,儘管int類型包含了4個位元組,但它仍只用一個地址來標識,雖然它共有4個地址,一般我們取左邊第一個位元組的地址作為int類型的地址標識(有些電腦會取右邊第一個位元組的地址,這個對於我們軟體設計者不重要,那是硬體設計者的問題)。那麼我們現在應該很明白了,如果我們在程式中定義一個變數為int型,那麼電腦就會將它儲存為4個位元組,在下一次擷取這個int值時,它會從這個變數的地址找起,讀取4個位元組共32個位的資料。如果將變數定義為short類型,那麼電腦將它儲存為2個位元組,擷取時從變數地址找起讀取2個位元組共16個位的資料。現在我們明白了資料類型就是這麼來的,它是如此的重要!

好了,現在我們清楚了,總結一下,記憶體中最小的單位是位,位的最小組合是位元組,每個位元組在記憶體中都佔有一個位置,這個位置用一個獨一無二的地址來標識,每個地址都包含一個數值。兩個或多個位元組的組合叫做資料類型,每個資料類型的地址用它左邊第一個位元組的地址來標識,電腦根據資料類型來儲存和擷取資料。

 

聯繫我們

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