| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1119 人关注过本帖
标题:指针,数组问题
取消只看楼主 加入收藏
xby841221
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-30
结帖率:0
收藏
 问题点数:0 回复次数:3 
指针,数组问题
请教论坛的高手们一个问题:
int main()
{
    int a[4]={1,2,3,4};
    int *ptr1=(int*)(&a+1);
    int *ptr2=(int*)((int)a+1);

    printf(" %x\n %x\n",ptr1[-1], *ptr2);
    return 0;
}
结果是多少?为什么?
*提示*,涉及到大小端问题。
搜索更多相关主题的帖子: 多少 return 
2011-02-18 18:32
xby841221
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-30
收藏
得分:0 
回复 3楼 犬虫门心
非常感谢!讲的很清楚了,但是如果再加上CPU大小端一起讲解会有更好的效果,我想这个问题初学的人应该会很常见。以下是CPU大小判断的C代码;
int    checkSystem()
{
    union    check
    {
        int    i;
        char    ch;
    }c;
    c.i =1;
    return(c.ch==1);
}
输出结果为1,CPU为Little-Endian型;输出结果为0,CPU为BIG-ENDIAN。
*ptr2在CPU为Little模式时:
01 00 00 00
02
00 00 00
03 00 00 00
04 00 00 00
根据小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。
得出结果为:02 00 00 00,即:0x2000000。

*ptr2在CPU为Big模式时:
00 00 00 01
00
00 00 02
00 00 00 03
00 00 00 04
根据大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
得出结果为:00 00 01 00,  即:0x100。

理解有错的话,请加QQ:287068809指出,并讨论,希望不吝赐教!

[ 本帖最后由 xby841221 于 2011-2-19 18:44 编辑 ]
2011-02-19 17:55
xby841221
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-30
收藏
得分:0 
回复 21楼 点线面
在32位系统下,不管什么样的指针类型,其大小都为 4byte。可以测试一下 sizeof(void*)。
2011-02-19 19:25
xby841221
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-6-30
收藏
得分:0 
以下是引用Garfeild在2011-2-20 15:53:06的发言:

指针地址能有负数吗?ptr1[-1],这看不明白啊
看看三楼的讲解很清楚,这里就不重复了。
2011-02-21 10:39
快速回复:指针,数组问题
数据加载中...
 
   



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

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