vs2012中for循环循环条件作用域

for(int i = 0; i < 4; i++);
int i = 2;
printf("%d",i);//这里输出是4
int *pi = &i;
*pi = 1;
printf("%d",i);//这里输出也是4
//这里的i值无法修改。。。。 没有悬赏分 就是分享给大家 虽然我也不知道是为什么,但是遇到这个问题了,调试了很久

vs2012能调试Java代码

你没发现你可以定义两个i么,第一个是for循环中的i,作用域就是for循环,一结束,这个变量就失效了。
所以后面你还可以继续定义同名变量i;如果你把for循环的变量i写在最前面,那么i的作用域就是这个方法了,而且不能再定义同名变量了。

 int i =0;
 for(; i < 4; i++);

这样最后的i就是4了。

vc2010运行结果:
21
怎么会都是4?
只有一种可能,你改的文件不是你项目里的文件。
你把源文件都关掉,从解决方案标签打开主文件看看。

我使用 VS2008 验证,看到一个奇怪的现象:
在 IDE 中调试时看到 i的值都是4,但输出的结果是 2 和 1.

图片说明本来以为for循环后再次申明得到的栈内存地址会是跟for循环里一样的,结果是不一样的地址,对于后面那个地址用指针去改了后值改了,但是显示的值依然是for循环的值。。。。