为什么垃圾值存储在一个地址等于它在 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 垃圾值。
我 运行 代码多次以确保它不是巧合,但它仍然给出相同的结果。
得到答案:
x
和 p
碰巧在内存中相邻(对于这种情况,不能保证它们总是获得相邻的内存)。所以在递增 p 之后,p 开始指向它自己。因此具有相同的值。
我遇到了这个奇怪的代码,我知道在这种情况下递增指针并打印该值是不安全的,但这里有趣的是应该是垃圾的值反而等于它的地址。谁能解释一下为什么会这样。
#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 垃圾值。 我 运行 代码多次以确保它不是巧合,但它仍然给出相同的结果。
得到答案:
x
和 p
碰巧在内存中相邻(对于这种情况,不能保证它们总是获得相邻的内存)。所以在递增 p 之后,p 开始指向它自己。因此具有相同的值。