`a`(循环内的变量)的地址没有改变

问题描述 投票:0回答:1

这是 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语言中的某种机制导致的?

c memory-management while-loop memory-address
1个回答
0
投票

a
是循环体内的局部变量。您正在打印变量本身的地址,而不是它指向的地址。当每次循环迭代完成时,
a
超出范围。如果编译器愿意,它可以在下一次迭代中自由地重用相同的内存。

© www.soinside.com 2019 - 2024. All rights reserved.