C中的数组地址减法

可能重复:
C中的指针算法

码:

int main() { int a[ ] ={0,1,2,3,4}; char c[ ] = {'s','a','n','j','u'}; printf("%d\n",&a[3]-&a[0]); printf("%d\n",&c[3]-&c[0]); return 0; } 

为什么两者的输出都是3 3,如果我们考虑地址的差异,两者都会有所不同?

在指针算术中,减法返回的差异不是以字节为单位,而是在两个指针之间的指针类型中。

因此,由于a[3]a[0]之间a[3] int s的差异与c[3]c[0]之间的char s的差异相同 – 两者都得到相同的结果。

指针减法运算的算术类似于:

 type* p1 = ... type* p2 = ... p1 - p2 == (((int)p1) - (int(p2))) / sizeof(type)