gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:32:07 24 4
gpt4 key购买 nike

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

好吧,一个数组实际上等于另一个数组。我了解个别输出对于每个数组变量,在这种情况下是两个地址之间的差异是 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= %d\n",&oddNums[4], ip, &oddNums[4] - ip);
/*prints &oddNums[4] 2686740 - ip 2686724= 4*/

return EXIT_SUCCESS;
}

最佳答案

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

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

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

关于c - 查找数组中元素地址之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com