首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言指針入門:從生活類比到內存模型的本質解析

     編輯:關於C語言

生活中的「指針」:紙條與書的故事

想弄懂指針並不容易,但生活中到處都是指針。想象一下:你要借書給朋友,朋友不在宿舍,你把書放在「2層3號書架」,然後在桌上留張紙條:「你要的書在第2層3號書架」。

  • 書 = 實際數據(變量 i)
  • 書架位置 = 內存地址
  • 紙條 = 指針(存儲地址的變量)

紙條本身不是書,但通過紙條上的地址信息,你能找到書。C 語言指針同理:指針變量存儲的是內存地址編號。

指針的內存本質:只是個普通變量

聲明 int *pi; 在內存中開闢一塊固定寬度空間(32位系統 4 字節),命名為 pi。它與 int i;、char a; 本質無異——都是變量,佔據內存,有地址,有值。

內存地址 → 6  7  8  9  10 11 12 13 14
-------------------------------------
... | 30 | 't' |    |    |    |    | ...
-------------------------------------
     | i  |  a  |    |    | pi |    |

讓指針「指向」變量:& 與賦值

pi = &i;  // 取 i 的地址(假設為 6),賦給 pi
內存地址 → 6  7  8  9  10 11 12 13 14
-------------------------------------
... | 30 | 't' |    |    | 6  |    | ...
-------------------------------------
     | i  |  a  |    |    | pi |    |

現在 pi 的值為 6,即 i 的地址。我們說 pi 指向 i。

解引用操作 *:順著地址找數據

printf("%d", *pi);  // 輸出 30

*pi 的讀法:「pi 內容所指地址上的內容」。

  • pi 的值 = 6(地址)
  • *pi = 地址 6 上的內容 = 30
  • *pi 等價於 i

核心口訣

& 取地址,* 取內容
指針變量存地址,解引用拿數據。
指針就是那張「紙條」,裡面寫著「書」的位置。

思考小測驗


char a, *pa;
a = 10;
pa = &a;
*pa = 20;
printf("%d", a);  // 輸出什麼?

答案:20。*pa = 20 修改的是 pa 指向的內存單元,即 a。

下一步預告

理解了單級指針,下一篇將挑戰 int **ppa——「指針的指針」,解鎖更高階的內存操作能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved