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)