| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1002 人关注过本帖
标题:自己动手给指针加 1,结果就看不懂*p 了
取消只看楼主 加入收藏
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
自己动手给指针加 1,结果就看不懂*p 了
//代码在最下边

在我这台机子加我这个编译器上,sizeof(3)的值是4,就是整型数据占4字节。
按我的理解,a[0]在内存中占32位,数值是1,就是前31位都是0,然后1个1;
a[1]在内存中占32位,前30位是0,后面跟2个1;
*p就是取a[0]的后24位加a[1]的前8位,结果是100000000b,就是256,怎么显示就成了33554432了呢?
求大神解答,一定是我有什么地方搞错了。

程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(){
    int a[3] = {1, 2, 3};
    int *p = a;
    p = 2686721;        //因为之前用printf显示出p的值是2868720,所以这里给他加上1

    printf("%d", *p);    //程序运行到这里显示结果33554432,是1后面跟25个0的二进制数

    return 0;
}
搜索更多相关主题的帖子: 编译器 
2014-09-23 15:14
muyoucumian
Rank: 3Rank: 3
等 级:等待验证会员
帖 子:80
专家分:126
注 册:2014-8-30
收藏
得分:0 
回复 4 楼 rjsp
我明白了
----------------------------------------------------

 0 0 0 0 0 0 0 0   0 0 0 0 0 0 1 0
 _ _ _ _ _ _ _ _   _ _ _ _ _ _ _ _ 
|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|

假设上面分别是内存100单元和内存101单元里存储的数据,假设
short a[10];
并且正好a的地址是100
则a[0]的值是16384,因为对于x86处理器来说,他处理多字节数据是从右往左看的,先看右边字节的值。而对于单一的字节,他看里面的比特位的值也是从右往左看的,结果与我们从左往右看到的0000000000000010不同,X86处理器看到的值是0100000000000000B,翻译成十进制就是16384。

谢谢版主指点,这么基础又重要的东西C语言书上也不提,真是太不负责任了。

2014-09-23 16:44
快速回复:自己动手给指针加 1,结果就看不懂*p 了
数据加载中...
 
   



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

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