內存 編址 指針

2^10 = 1K

2^20 = 1M

2^30 = 1G

2^32 = 4G

 

別忘了,上述單位都是Byte字節,內存是以字節爲單位編址的。可以將32位機器的內存(應該是虛擬內存)想象成一個數組,含有2^32個元素。

內存地址就是這個數組的編號,從1(0x00000001)到 2^32(0xFFFFFFFF)

 

          | ————  | 0xFFFFFFFF

          | ————  |

          | ————  |

          | ————  |

          | ————  |

          | ~~~~~  |

          | . . . . . . . .|

          |00000000|

          | ————  |

          | ————  |

          | ————  |

          | ————  |

          | ————  |

          | ————  |

          | ————  |

          | ————  |                         ___

          | ————  |  0X00000004     +

          | ————  |  0x00000003     int 

          | ————  |  0x00000002      +

          | ————  |  0x00000001    ----    char

 

一個指針佔四個字節,這四個字節組成的32位數即該指針指向的地址。指針只能指向上面數組中的一項,如果指向的是char型,那麼其值就是該地址對應的那個字節,如果指向的是int型,那麼其值要從該指針對應的那個字節再向上數3個,總共四個字節組成這個int的值。

在使用絕對地址指針時,要注意指針自增自減操作的結果取決於指針指向的數據類別。
如:int *p = (int *)0xF000FF00;
p++後的結果是p= 0xF000FF01
p指向int,即:int *p = (int *)0xF000FF00;
p++(++p)的結果等同於:p = p+sizeof(int),而p—(—p)的結果是p = p-sizeof(int)

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章