【问题标题】:Array address subtraction in C [duplicate]C中的数组地址减法[重复]
【发布时间】:2012-04-01 10:33:27
【问题描述】:

可能重复:
Pointer Arithmetic In 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,如果我们考虑到地址的差异,它们对于两者都会不同??

【问题讨论】:

  • 还有……这有什么意义?你真的在问什么问题?

标签: c arrays pointers


【解决方案1】:

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

因此,由于 a[3]a[0] 之间的 ints 差异与 c[3]c[0] 之间的 chars 差异相同 - 两者的结果相同。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多