閱讀200 返回首頁    go 阿裏雲 go 技術社區[雲棲]


指針的疑問

1.一個指針變量占用多少個字節的內存空間?占用的空間是否會跟隨所指向變量的類型而改變?

在同一種編譯器環境下,一個指針變量所占用的內存空間是固定的。比如,在16位編譯器環境下,任何一個指針變量都隻占用2個字節,並不會隨所指向變量的類型而改變。

2.既然每個指針變量所占用的內存空間是一樣的,而且存儲的都是地址,為何指針變量還要分類型?

而且隻能指向一種類型的變量?比如指向int類型的指針、指向char類型的指針。

其實,我覺得這個問題跟"數組為什麼要分類型"是一樣的。 

 

根據變量的定義順序,這些變量在內存中大致如下圖排布:

 其中,指針變量pint類型變量i各占2個字節,char類型的c占一個字節,p指向c,因此p值就是c的地址

 

1> 最初的時候,我們用char *p指向變量c。當利用*p來獲取變量c的值時,由於指針p知道變量cchar類型的,所以會從ffc3這個地址開始讀取1個字節的數據:0000 0001,轉為10進製就是1

 2> 後來,我們用int *p指向變量c。當利用*p獲取變量c的值時,由於指針p認為變量cint類型的,所以會從ffc3這個地址開始讀取2個字節的數據:0000 0010 0000 0001,轉為10進製就是513

 

最後更新:2017-04-03 16:48:53

  上一篇:go 指針與字符串:(const)char *p2 = "lmj";定義的是一個字符串常量!符串常量,正因為是常量,所以它內部的字符是不允許修改的。
  下一篇:go 正則表達式表示任意字符