内存 编址 指针

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)

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值