学习指针时,我尝试了指针声明/取消指定。悬挂指针的“可视化”
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int *call() {
int a = 3;
return &a;
}
int main() {
printf("call* is: %d\n", *call());
printf("call is: %p\n", call());
Sleep(2000);
printf("call* is: %d\n", *call());
printf("call is: %p\n", call());
Sleep(2000);
printf("call* is: %d\n", *call());
printf("call is: %p\n", call());
return 0;
}
所以“显然”“a”是一个局部变量。 但我的问题是, 当我读出“a”的地址时,它始终是相同的地址。 这是为什么?
PS:我在后台运行一个素数计算器来填充尽可能多的内存,并且我在“睡眠”中放置了程序等待,但仍然是“a”的地址是总是一样。
程序中没有其他线程;你怎么能在后台运行任何东西?您的电冰箱是否也在后台运行? –
好的:)我希望你有乐趣。 但是,你能告诉我如何“看”/“可视化”的地址“一”是不恒定的? – BZAD
几乎所有的假设都是错误的,没有任何意义。首先请查找“未定义的行为”。然后,如果你仍然决定这个职业,那么去看看生成的机器代码,看看发生了什么。 –