首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针相减的有关问题,立结

2012-03-31 
指针相减的问题,在线等,立结.inta[3],bint*p,*qa[0]0a[1]1a[2]2paq&a[2]ba[q-p]为什么这里

指针相减的问题,在线等,立结.
int   a[3],   b;
int   *p,   *q;

a[0]=0;  
a[1]=1;  
a[2]=2;

p=a;
q=&a[2];

b=a[q   -   p];

为什么这里的b=2   ?       q指向   a[2],   p指向   a[0].   q-p是指针相相减,还是指针指向的值相减,还是地址相减???



[解决办法]
地址相减
[解决办法]
是p和q所指向的地址相减,因为数组分配的是连续空间,所以相减得2,即b=a[2].
[解决办法]
地址相减也即是指针相减。
p=a;
q=&a[2];
b=a[q - p];
——————————————————————————————————————
p是a数组首地址,q是数组a[2]元素的地址。q - p 即为a[0]和a[2]相距的间隔。即为2。
所以b=a[q - p]; ----〉b = a[2] = 2;
[解决办法]
指针相减:
1。指向相同数组的时候才有意义
2。值是之间存在的数组元素的个数,不是指针内容的差值
[解决办法]
再去自己動下手就能更明白了
[解决办法]
int a[3], b;
int *p, *q;

a[0]=0;
a[1]=1;
a[2]=2;

p=a;
q=&a[2];

b=a[q - p];

下面我们仅仅修改 q = &a[2]; 这句话。

1、改为 :q = &a[0]; 那么 b = a[q - p] = a[0] = 0;
2、改为 :q = &a[1]; 那么 b = a[q - p] = a[1] = 1;
2、改为 :q = &a[2]; 那么 b = a[q - p] = a[2] = 2;

热点排行