| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 916 人关注过本帖
标题:怎么理解这个元素地址运算?
只看楼主 加入收藏
hzz063
Rank: 3Rank: 3
来 自:横县百合
等 级:论坛游侠
帖 子:80
专家分:114
注 册:2010-1-27
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:14 
怎么理解这个元素地址运算?
#include "stdio.h"
void main()
{
    int *p,i,a[10]={1,2,3,4,5,6,7,8,9,10};
    p=a;
    for(i=0;i<10;i++)
    {printf("%d-%d=%d\n",p,a,p-a);
     p++;
    }
}

我那编译系统是一个整形4个字节,本以为输出的结果是0,4,8,16...这样。
但实际是0,1,2,..就像:
1245008-1245008=0
1245012-1245008=1
1245016-1245008=2
1245020-1245008=3
1245024-1245008=4
1245028-1245008=5
1245032-1245008=6
1245036-1245008=7
1245040-1245008=8
1245044-1245008=9
这又是怎么理解呢??
搜索更多相关主题的帖子: 地址 运算 元素 
2010-02-21 15:45
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:3 
程序代码:
#include <stdio.h>
int main()
{
    int *p,i,a[10]={1,2,3,4,5,6,7,8,9,10};
    p=a;
    for(i=0;i<10;i++)
    {
        printf("%x-%x=%d\t",p,a,(long)p-(long)a);
        printf("%d\n",*p);
        p++;
    }
}
2010-02-21 16:01
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
可以对指向同一个数组的两个指针求差值,但要注意,差值的单位是相应类型的大小。p和a的类型都是一个int,所以结果正是这样
2010-02-21 16:08
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
能理解"p+1"是什么吗?
可以这样理解:指针计算是以sizeof(类型)为单位来进行。

★★★★★为人民服务★★★★★
2010-02-21 16:22
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
3楼的请勿瞎说。


地址是用int表示的吗?

[ 本帖最后由 Devil_W 于 2010-2-21 16:41 编辑 ]
2010-02-21 16:40
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:2 
仔细想想没有说错。p和a是指针,它们的类型是int指的是它们指向的类型。你声明p时不是 int* p吗;而这与指针在内存中存储用什么类型有什么关系。

[ 本帖最后由 heartnheart 于 2010-2-21 16:48 编辑 ]
2010-02-21 16:45
hzz063
Rank: 3Rank: 3
来 自:横县百合
等 级:论坛游侠
帖 子:80
专家分:114
注 册:2010-1-27
收藏
得分:0 
回复 4楼 cnfarer
恩 p+1是指向下一个数组元素,这个明白。p-a我理解为是表面的数字运算了 呵呵

一切只因为喜欢。
2010-02-21 16:58
hzz063
Rank: 3Rank: 3
来 自:横县百合
等 级:论坛游侠
帖 子:80
专家分:114
注 册:2010-1-27
收藏
得分:0 
回复 2楼 Devil_W
(long)p-(long)a   这个是怎么理解的呀?

一切只因为喜欢。
2010-02-21 17:12
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
是不是我做了cast 之后就有了你想要的结果了?


就做强制转换。
2010-02-21 17:31
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
回复 7楼 hzz063
p-a是指针运算,而不是数值运算

★★★★★为人民服务★★★★★
2010-02-21 17:48
快速回复:怎么理解这个元素地址运算?
数据加载中...
 
   



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

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