C語言修煉之路初識指針陰陽竅 地址還歸大道真
(壹) 敢問指針為何物
1.1 指針的概念
在計算機科學中,指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變量單元,可以說,地址指向該變量單元。因此,將地址形象化的稱為“指針”。意思是通過它能找到以它為地址的內存單元。
那我們就可以這樣理解 –》 指針是個變量,存放內存單元的地址(編號)。
總結:指針就是變量,用來存放地址的變量。(存放在指針中的值都被當成地址處理)。
1.2 指針的背後
經過仔細的計算和權衡我們發現一個字節給一個對應的地址是比較合適的。
對於 32位 的機器,假設有 32根地址線 ,那麼假設每根地址線在尋址的是產生一個電信號正電/負電(1或者0)
這裡就有2的32次方個地址。
這裡我們就明白:
- 在32位的機器上,地址是32個0或者1組成二進制序列,那地址就得用4個字節的空間來存儲,所以一個指針變量的大小就應該是4個字節。
- 那如果在64位機器上,如果有64個地址線,那一個指針變量的大小是8個字節,才能存放一個地址。
- 指針是用來存放地址的,地址是唯一標示一塊地址空間的。
- 指針的大小在32位平臺是4個字節,在64位平臺是8個字節。
(貳) 指針和指針類
2.1 指針的類型
這裡我們在討論一下:指針的類型 我們都知道,變量有不同的類型,整形,浮點型等。那指針有沒有類型呢? 準確的說:有的。
當有這樣的代碼:
要將&num(num的地址)保存到p中,我們知道p就是一個指針變量,那它的類型是怎樣的呢? 我們給指針變量相應的類型。
這裡可以看到,指針的定義方式是:type + *。 其實: char*類型的指針是為瞭存放 char 類型變量的地址。 short* 類型的指針是為瞭存放 short 類型變量的地址。 int*類型的指針是為瞭存放int 類型變量的地址。
2.2 指針類型的意義
如下圖所例:使用char*是可以存放int類型的地址的(都是四個字節),但真的有怎麼簡單嗎?
我們來對比一組操作:
我們可以看到,賦值後的a隻改變的一個字節的大小
綜上,我們可以得出以下結論:
- 指針類型決定瞭指針解引用操作的時候,一次訪問幾個字節(即訪問內存的大小)
- 指針的類型決定瞭指針向前或者向後走一步有多大(距離)。
- 決定瞭 指針 +- 整數的步長
大傢有興趣的話也可以去分析以下代碼,加深對於指針類型的理解
2.3 指針的解引用
這個代碼的實現就交給大傢自己去調試啦✅✅✅
總結: 指針的類型決定瞭,對指針解引用的時候有多大的權限(能操作幾個字節)。 比如:char*的指針解引用就隻能訪問一個字節,而int*的指針的解引用就能訪問四個字節。
到此這篇關於C語言修煉之路初識指針陰陽竅 地址還歸大道真的文章就介紹到這瞭,更多相關C語言 指針內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C++ 中的INT_MAX,INT_MIN數值大小操作
- c語言 數據存儲與原碼 反碼 補碼詳細解析
- C語言自定義類型的保姆級講解
- 詳解C語言中數據的存儲
- 從c++標準庫指針萃取器談一下traits技法(推薦)