2 huleiwhy huleiwhy 于 2016.01.14 12:30 提问

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值无法修改。。。。 没有悬赏分 就是分享给大家 虽然我也不知道是为什么,但是遇到这个问题了,调试了很久

6个回答

CSDNXIAOD
CSDNXIAOD   2016.01.14 12:32

C++的for循环作用域
for循环作用域
for循环中的变量作用域
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

enpterexpress
enpterexpress   2016.01.14 12:50

vs2012能调试Java代码

wojiushiwo945you
wojiushiwo945you printf这个不是java的库函数,所以这段不是java代码啊。
接近 2 年之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.14 12:52

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

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

这样最后的i就是4了。

huleiwhy
huleiwhy 这个只是我想说我这边出现了这种现象,按标准在for结束后i 会被释放掉,后面的定义的i不会受到前面的影响
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.14 12:59

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

qq_27183003
qq_27183003 重建一个项目,在只测试这段代码。这段代码输出21是没问题的,问题只能出现在你的其他代码上。
接近 2 年之前 回复
huleiwhy
huleiwhy 源文件没改的话是不能调试到这句的
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.01.14 13:00

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

huleiwhy
huleiwhy 其实在我测试代码里是没有printf这句的
接近 2 年之前 回复
huleiwhy
huleiwhy   2016.01.14 13:17

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!