c - 为什么这段代码总是产生相同的结果?

标签 c memory-address

我只是不明白为什么这段代码总是给出 5 作为输出。我不是 C 专业人士,并且试图更详细地了解指针和地址。然后我就陷入了这段代码

代码如下

#include <stdio.h>
int main()
{
int a[4] = {1, 2, 3, 4};

int b[4] = {1, 2, 3, 4};

int n = &b[3] - &a[2];

printf("%d\n", n);

}

**据我了解,我们正在做的是尝试从 b[3] 的地址中减去 a[2] 的地址 **

对于每次编译,编译器都会分配不同的内存位置,因此不可能有特定的输出。但这段代码总是给出输出 5。即使我增加了数组“a”中的元素数量,输出仍然相同。为什么?

最佳答案

运算符-,当应用于指针时,仅在下面的相应(数组)对象的范围内定义。由于您的参数属于不同的数组,因此行为未定义。如果您观察到相同的值,可能是因为编译器会将一个变量放在内存中另一个变量的旁边,这样它们的相对距离在不同的运行中可能是相同的。但这并不能保证,因为编译器的行为方式实际上是未定义的。

关于c - 为什么这段代码总是产生相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237756/

相关文章:

c - Windows 有可以从 C 调用的 JSON API 吗?

c - 如何检查存储在地址中的各个字节的情况?

javascript - 对相似参数进行分组的逻辑

c++ - 在 C++ 黑客游戏代码中保留地址?

c++ - 指针值超出可用内存?如何?

delphi - 如何将程序地址保存在数组中,然后在Delphi中使用它们

javascript - 如何找到 WebAssembly 缓冲区的地址并将其返回给 Javascript?

c - C 的 Linux 目录大小问题

c - 如何在LCD上写入浮点值?

c - 为什么这里会出现段错误?