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

时间:2018-09-08 17:32:13

标签: 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”中的元素数量时,输出仍然相同。为什么?

1 个答案:

答案 0 :(得分:1)

运算符-应用于指针时,仅在下面各个(数组)对象的边界内定义。由于您的参数具有不同的数组,因此行为是不确定的。如果观察到相同的值,则可能是因为编译器会将一个变量紧挨着另一个变量放置在内存中,从而使它们的相对距离在不同的运行中可能相同。但这不能保证,因为实际上编译器尚未定义其行为方式。

相关问题