我只是不明白为什么这段代码总是给出 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/