| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6127 人关注过本帖
标题:printf("%p", p);输出的是指针的地址,那么这个值是偏移地址吗?
取消只看楼主 加入收藏
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
printf("%p", p);输出的是指针的地址,那么这个值是偏移地址吗?
假设printf输出的值是0028FEF8,如果这个值是偏移地址的话,那么偏移地址就是8*4=32位。如果还按照段地址加偏移地址来寻址的话,那么cpu的最大寻址能力就是2^33=16GB。可是我的cpu和操作系统都是64位的,CPU的最大寻址能力应该是2^64啊,怎么就不对了呢?

我觉得可能的答案有两个:
1.printf输出的不是偏移地址或者输出的不是偏移地址的全部位数
2.64位CPU不再按照段地址+偏移地址来寻址。
求大神解答!

程序代码:
int main(){
    int a[5] = {1, 2, 3, 4, 5};
    int *p = a;

    printf("%p", p);    //输出0028FEF8
    return 0;
}

搜索更多相关主题的帖子: 操作系统 能力 
2014-09-24 20:26
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 4 楼 书生等待
呵呵,指针就是个坑,我要把这坑里的鱼虾青蛙泥鳅黄鳝螺蛳蚌壳都捞的不剩一个再上来
2014-09-24 20:48
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 3 楼 TonyDeng
我知道了,对32位CPU,物理地址=32位段地址 + 32位偏移地址。
2014-09-25 19:08
快速回复:printf("%p", p);输出的是指针的地址,那么这个值是偏移地址吗? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021644 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved