瀏覽單個文章
harrisonlin
Advance Member
 
harrisonlin的大頭照
 

加入日期: Jun 2003
您的住址: Taipei
文章: 442
你是否對於"指標指向的資料長度不一,卻又同樣只佔 4 bytes"感到疑惑呢?

其實詳細地說,指標記錄著某個"位址",而這個"位址"只是代表著某一"段"記憶體的開頭,裡頭存放著某些資料,舉例來說 :

int a = 10;
int *p = &a;

假設目前 a 在記憶體中的位址是 1000,那麼 p 目前的值就是 1000。因為一個在32 位元機器的 int 上是 4 bytes,所以接下來的1001, 1002, 1003就是這個變數 a 所佔用的空間,裡頭存放著 10, 指標 p 只是指向 1000 這個位址。當程式透過 p 來讀取變數 a 的值時,系統會讀取從 p 所指向的位址開始之後的 4 bytes (1000, 1001, 1002, 1003)的資料,並把它傳給程式。指標就像是一個標籤,記著記憶體中的某個位址,而這個位址之後多少 bytes 是屬於這個資料的,就看指標所指向的型態了:若是 int 指標,那麼指向位址後的 4 bytes(或 2 bytes,在 16 位元的機器上)就是這一個 int 的值;若是 float 指標,那麼指向位址後的 4 bytes 就是一個 float 的值。指向char 的指標就比較不同,從"指標指向的位址起"至"第一個'\0'出現的位址"止,是一個字串的值。

這樣解釋明白了嗎?
舊 2003-10-15, 05:59 PM #9
回應時引用此文章
harrisonlin離線中