这是 C 代码片段。
#include<stdio.h>
int N = 10;
while (N--) {
int *a;
printf("%p\n", &a);
}
运行结果(编译器:
tdm-gcc 4.9.2 64-bit release
,操作系统:win11
)显示程序在N次循环中打印了相同的值。这是一个随机事件,还是C语言中的某种机制导致的?
a
是循环体内的局部变量。您正在打印变量本身的地址,而不是它指向的地址。当每次循环迭代完成时,a
超出范围。如果编译器愿意,它可以在下一次迭代中自由地重用相同的内存。