瀏覽單個文章
SGI
Major Member
 
SGI的大頭照
 

加入日期: Sep 2003
文章: 263
引用:
Originally posted by harrisonlin
你是否對於"指標指向的資料長度不一,卻又同樣只佔 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'出現的位址"止,是一個字串的值。

這樣解釋明白了嗎?

------------------------------------------------------------------
十分感謝大大您詳細的說明唷
每次都讓您打一大堆字真是不好意思
沒想到又是牽涉到計概的東西啊

1)照大大您舉的例子,是說因為在32 位元機器的 int 上是 4 bytes
而整數值是除存在1000~1003的位址
所以不管值宣告多少,只要是整數型態都是占用這4byte
應該是這個意思吧?

2)那麼"將10存到1000~1003位址的方式"是不是又是一門學問呢?

3)那麼這4byte到底最高極限能存取多大的值呢?有正負號之分嗎?

4)大大您覺得我有沒有必要先把VC++丟一邊,去惡補點計概的東西啊?
     
      
舊 2003-10-16, 09:56 AM #11
回應時引用此文章
SGI離線中