为什么垃圾值存储在一个地址等于它在 C 代码中的地址

Why is garbage value stored at an address equal to its address in a C code

我遇到了这个奇怪的代码,我知道在这种情况下递增指针并打印该值是不安全的,但这里有趣的是应该是垃圾的值反而等于它的地址。谁能解释一下为什么会这样。

#include<stdio.h>
#include<stdlib.h>

int main(){
    int x = 10;
    int *p = &x;

    printf("Address before: %d, Value before: %d\n", p, *p);
    p++;
    printf("Address after:  %d, Value after:  %d\n", p, *p);
}

输出:

Address before: 6422036, Value before: 10
Address after:  6422040, Value after:  6422040

为什么存储在地址 6422040 的值等于 6422040 而不是某些 运行dom 垃圾值。 我 运行 代码多次以确保它不是巧合,但它仍然给出相同的结果。

得到答案: xp 碰巧在内存中相邻(对于这种情况,不能保证它们总是获得相邻的内存)。所以在递增 p 之后,p 开始指向它自己。因此具有相同的值。