全局变量和局部变量 c++,请问这个程序最后为什么输出5而不是8

#include<stdio.h>voidmain(){inti=2,j=3,k;k=i+j;{intk=8;if(i=3)printf("%d",k);elseprin... #include <stdio.h>
void main()
{int i=2,j=3,k;
k=i+j;
{ int k=8;
if(i=3) printf("%d",k);
else printf("%d",j);
}
printf("%d%d",i,k);
}
展开
 我来答
lexin_lyl
2011-11-23 · TA获得超过714个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:465万
展开全部
作用域不同,你里面那个花括号里的k是8,但是你的if条件不成立,所有没有打印8;外面那个花括号里面的k是5,所以打印了5。里面那个k在里面花括号结束的时候生命周期结束了,外面使用不了
追问
就是说{   int k=8;
if(i=3) printf("%d",k);
else printf("%d",j);
}
这里重新定义了k所以这个K的周期就是这个括号,但是这里i=3只是重新赋值不是重新定义,所以这个i值可以保留到整个程序结束?
追答
"就是说{   int k=8;
if(i=3) printf("%d",k);
else printf("%d",j);
}
这里重新定义了k所以这个K的周期就是这个括号,但是这里i=3只是重新赋值不是重新定义,"你这里的说法都是对的,后面那一句不对,不是因为重新赋值就能保留,而是因为你使用的是外面的变量i,你赋值的是外面的i,i的作用域和生命周期是外面的括号的结束,所以能一直保留到外括号的结束,如果你里面定义了i,同样会屏蔽了外面的i的
忘至白葬不情必0T
2011-11-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
先是if(i=3) printf("%d",k);注意这里是=,不是==。i=3是将3赋给i,再判断i的值是否非零。当然3是非零。所以输出k。这个k是8。
printf("%d%d",i,k);输出i和外层的k,这里i刚才执行了=3,所以值为3,k是外层的k,值为5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友aa1bff6
2011-11-23 · 超过17用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:45.2万
展开全部
#include <stdio.h>
void main()
{int i=2,j=3,k;
k=i+j;
{ int k=8;
if(i=3) printf("%d",k);
else printf("%d",j);
}//因为加了个括号,int k=8;的作用域只限括号里
printf("%d%d",i,k);//这里的k是k=i+j的值
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友66ee332
2011-11-23 · TA获得超过562个赞
知道小有建树答主
回答量:406
采纳率:0%
帮助的人:491万
展开全部
内层括号里的k再括号结束后就消失了,最后printf的k是最初定义的k
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式