c-查找数组中元素地址之间的差异



我有一道关于指针算术的考试复习题,其中一部分我们要减去两个数组变量的地址,这对我来说没有意义。

一个数组实际上等于另一个数组。我了解个人输出对于每个数组变量,在本例中为两个地址之间的差异是16,在此操作系统上给定int=4字节。

我不明白的是为什么减法得到4。我的逻辑是他们在数组中相隔4个位置,但这对我来说没有意义

int main(void)
{
int oddNums[5] = {1, 3, 5, 7, 9};
int *ip = oddNums;
printf("&oddNums[4] %d - ip %d= %dn",&oddNums[4], ip,  &oddNums[4] - ip);
/*prints &oddNums[4] 2686740 - ip 2686724= 4*/
   return EXIT_SUCCESS;
}

Subtraction返回4,因为它以sizeof(<array-element>)的形式返回结果。这样做是为了使减法与加法相反,加法也根据数组元素大小进行运算。

回想一下,如果a是一个数组,i是一个整数,那么a+i&a[i]相同,所以加法必须考虑元素的大小。为了遵循数学规则,减法也必须划分出元素的大小。

这使得指针算法变得容易得多,因为加法和减法运算要处理数组元素的大小。如果没有这个规则,就需要将加法或减法的结果除以或乘以元素的大小,以便获得所需元素的地址或偏移量。这很容易出错,而且很难阅读。最后,当您将元素大小从一个字节更改为几个字节,并且编码算法的人忘记了用sizeof乘或除时,这将造成维护噩梦。

指针减法的定义是给出两个指针之间的元素数差。

这类似于添加一个指向整数的指针:它意味着将指针提前该数量的元素。

确保你认为"指针"是告诉你在哪里可以找到某种类型的对象。(与将其视为表示内存地址的整数相反)。

相关内容

最新更新