gpt4 book ai didi

arrays - 对数组元素的地址进行减法时出现意外结果

转载 作者:行者123 更新时间:2023-12-02 02:16:14 26 4
gpt4 key购买 nike

我使用的是基于 x32 的处理器,其中 char = 1 字节、short = 2 字节、int = 4 字节

当我创建一个包含 20 元素的 char 类型数组时,我期望看到分配给该数组的 20 个内存空间,其地址仅相差 1 个字节,因为数组的类型。

如果我从数组中取出两个连续元素并减去它们的地址,在这种情况下我是否应该得到 1

对于类型为 shortint 的数组,我期望得到 24 >。这是因为 shortint 元素需要在内存中对齐。 短元素将位于偶数地址(diff 2)上,而int元素将位于可被4整除的地址上。

但是,当我运行以下代码时,为什么我得到 1,1,1 而不是 1,2,4

我怀疑在指针算术方面我遗漏了一些关键细节。

char vecc[20];
printf("%i\n", &vecc[1]-&vecc[0]);

short vecs[20];
printf("%i\n", &vecs[1]-&vecs[0]);

int veci[20];
printf("%i\n", &veci[1]-&veci[0]);

最佳答案

指针减法产生的结果是索引的差异,而不是地址之间间隙的大小。

引用 C11,第 6.5.6 章,(强调我的)

When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements. [...]

关于arrays - 对数组元素的地址进行减法时出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67128768/

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