指針的疑問
1.一個指針變量占用多少個字節的內存空間?占用的空間是否會跟隨所指向變量的類型而改變?
在同一種編譯器環境下,一個指針變量所占用的內存空間是固定的。比如,在16位編譯器環境下,任何一個指針變量都隻占用2個字節,並不會隨所指向變量的類型而改變。
2.既然每個指針變量所占用的內存空間是一樣的,而且存儲的都是地址,為何指針變量還要分類型?
而且隻能指向一種類型的變量?比如指向int類型的指針、指向char類型的指針。
其實,我覺得這個問題跟"數組為什麼要分類型"是一樣的。
根據變量的定義順序,這些變量在內存中大致如下圖排布:
其中,指針變量p和int類型變量i各占2個字節,char類型的c占一個字節,p指向c,因此p值就是c的地址
1> 最初的時候,我們用char *p指向變量c。當利用*p來獲取變量c的值時,由於指針p知道變量c是char類型的,所以會從ffc3這個地址開始讀取1個字節的數據:0000 0001,轉為10進製就是1
2> 後來,我們用int *p指向變量c。當利用*p獲取變量c的值時,由於指針p認為變量c是int類型的,所以會從ffc3這個地址開始讀取2個字節的數據:0000 0010 0000 0001,轉為10進製就是513
最後更新:2017-04-03 16:48:53