C語言中文網 目錄
首頁 > 編程筆記 > C語言筆記 > 指針 閱讀:27,318

什么是指針,C語言指針概述

要明白什么是指針,必須先要弄清楚數據在內存中是如何存儲的,又是如何被讀取的。

如果在程序中定義了一個變量,在對程序進行編譯時,系統就會為這個變量分配內存單元。編譯系統根據程序中定義的變量類型分配一定長度的空間。內存的基本單元是字節,一字節有8位。每字節都有一個編號,這個編號就是“地址”,它相當于旅館的房間號。在地址所標示的內存單元中存放的數據,就相當于在該旅館房間中居住的旅客。

大家一定要弄清楚“內存單元的地址”和“內存單元的內容”這兩個概念的區別,即“房間號”和“房間內所住客人”的區別。在程序中一般是通過變量名來對內存單元進行存取操作的。其實程序經過編譯以后已經將變量名轉換為變量的地址,對變量值的存取都是通過地址進行的。這種按變量地址存取變量的方式稱為直接訪問方式。

還有一種間接訪問的方式,即變量中存放的是另一個變量的地址。也就是說,變量中存放的不是數據,而是數據的地址。就跟尋寶一樣,可能你按藏寶圖千辛萬苦找到的寶藏不是金銀珠寶,而是另一張藏寶圖。按C語言的規定,可以在程序中定義整型變量、實型變量、字符型變量,也可以定義這樣一種特殊的變量,它是存放地址的。

由于通過地址能找到所需的變量單元,所以可以說,地址“指向”該變量單元。如同一個房間號指向某一個房間一樣,只要告訴房間號就能找到房間的位置。因此在C語言中,將地址形象地稱為“指針”,意思就是通過它能找到以它為地址的內存單元。

所以,一個變量的地址就稱為該變量的指針。指針就是地址,而地址就是內存單元的編號。它是一個從零開始的、操作受限的非負整數。

為什么是操作受限的?因為非負整數與非負整數可以加減乘除,但是指針和指針只能進行相減運算,不能進行其他運算,因為沒有意義。而且進行相減運算也是有條件的:只有同一塊空間中的地址才能相減。而且兩個指針變量相減之后的結果是一個常量,而不是指針型變量,即相減的結果是這兩個地址之間元素的個數,而不是地址的個數。這個后面還會再講。

內存中一個單元指的是一字節,一字節有 8 位。每根地址總線都有兩種狀態:0 和 1。兩根地址總線就有 4 種組合,能控制4個內存單元;三根地址總線就有 8 種組合,能控制 8 個內存單元;n 根地址總線就有 2n 種組合,能控制 2n 個內存單元。那么 CPU 總共是通過幾根地址總線對內存進行處理的?一般的計算機是 32 位的,即 32 根地址總線,那么就能夠控制 232 個內存單元,即 232 字節。

232B=4GB,所以 32 位系統的計算機只能控制 4GB 的內存。前面討論為什么內存不做得同硬盤一樣大,原因就在這里。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo