| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 717 人关注过本帖
标题:一个新手级的问题,求解答
只看楼主 加入收藏
天之痕_huang
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2011-11-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
一个新手级的问题,求解答
为什么
int a[4];
int p;
p=&a[3]-&a[0];
输出p得3而不是12

搜索更多相关主题的帖子: 问题 
2011-11-09 14:04
fuyucao
Rank: 1
等 级:新手上路
帖 子:67
专家分:7
注 册:2011-10-17
收藏
得分:0 
你都没有说a[4]这个数组的各个数十多少
2011-11-09 14:07
天之痕_huang
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2011-11-7
收藏
得分:0 
我是想输出它的地址而已,各个数值是默认为0的
2011-11-09 14:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这是指针运算,两个指针之差,每个步长是元素(int)长度,是间隔多少个元素的值。回忆一下指针p+1、p+2是怎么进行的,就能理解这个问题。因此顺道回答2楼,这里不需要知道数组的各个数的具体值。

授人以渔,不授人以鱼。
2011-11-09 14:11
天之痕_huang
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2011-11-7
收藏
得分:0 
还是有点乱,那要怎么样才能进行地址之间的运算?
2011-11-09 14:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
&a[3]和&a[0]都是地址(指针值),你变换p1=&a[3]、p2=&a[0],则&a[3]-&a[0]=p1-p2,两个指针之差其实就是两个元素的下标之差。当我们定义p=&a[0]的时候,p+3就是&a[0+3],记得以前这样做过么?如果用星号解指针,*p是a[0],*(p+3)就是a[3]。

指针加减一个整数n,其地址增减是n倍所指向数据类型的长度。定义int* p,则p+1是增进1个int长度,定义double* p,则p+1是增进1个double长度,两者的1是不同长度的。因此,指针加减运算的结果是“倍数”。

[ 本帖最后由 TonyDeng 于 2011-11-9 14:23 编辑 ]

授人以渔,不授人以鱼。
2011-11-09 14:18
koudong
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-29
收藏
得分:0 
回复 6楼 TonyDeng
答得也太perfect了
2011-11-09 15:17
快速回复:一个新手级的问题,求解答
数据加载中...
 
   



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

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