C中的数组地址减法[重复]

Posted

技术标签:

【中文标题】C中的数组地址减法[重复]【英文标题】:Array address subtraction in C [duplicate] 【发布时间】: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,如果我们考虑到地址的差异,它们对于两者都会不同??

【问题讨论】:

还有……这有什么意义?你真的在问什么问题? 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于C中的数组地址减法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言,删除数组中的重复数字然后输出

从c中的struct数组中删除重复名称[重复]

Java中具有不同数据类型的复合减法[重复]

在c语言中输入数组两个数组,查找重复元素并输出怎么写啊

C语言问题 把一个数组中的重复元素去掉

如何通过c中的指针传递二维数组[重复]