指针相减的问题,在线等,立结.
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;