【发布时间】:2020-02-06 10:18:30
【问题描述】:
代码如下:
#include <stdio.h>
int main()
{
int i;
printf("%p\n",&i);
for (i = 0; i < 5; i++)
{
int i = 10;
printf("%d %p\n", i,&i);
i++;
}
return 0;
}
首先我们定义了一个变量i(就在main之后)。然后在for 循环的开始,我们再次定义了相同的变量i。因此,在for 循环内,i 的值为 10。for 循环必须只迭代一次,因为i>5 在第一次迭代之后。但令我惊讶的是,输出如下:
0x7ffe8b799da0
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
我的问题是:
1)为什么编译器在执行i<5;i++指令时考虑初始定义变量i,而不是重新定义变量i? (第一次迭代后)。
2) 为什么编译器给同一个变量标识符i分配不同的内存地址?
【问题讨论】:
-
因为它不是同一个变量。它是两个具有相同名称的不同变量。在内部,它将使用某种“名称修饰”方式将它们分开。