C++指针加减法

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:22:51
求教:c++可以编译通过(&a+i)-&a却不可以通过&(a[i])-&a,why?(a为一维数组)
不好意思,写错了,其实问题是这样的:快排:void sort(long *l,long *r)
{ long x=*(l+ran()%(r-l)),*i=l,*j=r,y;
for(;i<=j;)
{ for(;*i<x;i++);
for(;*j>x;j--);
if(i<=j)
{ y=*i;
*i=*j;
*j=y;
i++;j--;
}
}
if(l<j)sort(l,j);
if(i<r)sort(i,r);

因为 (&a+i)-&a 当中两次&运算都是对数组a再取地址得到的结果是指针的指 针,对等,当然可以编译通过
&(a[i])-&a 当中第一次对a[i]取地址得到的结果是指针,第二次对a取地址得到结果是指针的指针,不对等, 相加当然无法编译

因为想要a【i】的地址只能通过数组名+偏移量的方式

因为a[i]本来就是个地址.

因为a就是a[0]的地址,前面(&a+i)-&a,比如&a=1000,则&a+i=1000+i;
后者 &(a[i])-&a,a本来就是地址,&(a[i])也是地址,两者可以相减,&a就不知是什么了,前后类型不对应,所以错误,应该改为&(a[i])-a

类型不匹配。
a是地址,a[i]是值非地址。