for(i = 0; i < 5; i++){
int j;
printf("%X\n", &j);
}
在此循环中创建了多少个临时变量j
?
j
是创建了5次,还是仅创建一次?
虽然地址相同..
答案 0 :(得分:5)
5。虽然编译器当然可以将其优化为1。
答案 1 :(得分:1)
假设您稍微修改了代码:
for (i = 0; i < 5; i++)
{
int j = rand();
printf("%5d (%p)\n", j, (void *)&j);
}
您会在每次迭代中看到j
的不同值,清楚地表明j
每次循环都会得到一个值,即使j
的地址是在每个循环中相同。这将更清楚地证明j
在每次迭代时被初始化(并且在每次迭代时被逻辑创建和销毁)。
答案 2 :(得分:0)
嗯,这里有两件事要提,
变量j
的位置是下一个“}
”。当程序接近括号时,变量j
就会死亡。
计算机中有一种机制,它们倾向于保留广泛使用的变量并防止它们死亡,因为它们可能需要再次使用。因此,计算机很可能实际上不会生成变量j
5
次。
就你的问题的答案而言,你可以说5,因为想要问你这个问题的人希望你对变量的位置有一个了解。