全局变量和局部变量 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);
} 展开
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);
} 展开
展开全部
作用域不同,你里面那个花括号里的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的
展开全部
先是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
printf("%d%d",i,k);输出i和外层的k,这里i刚才执行了=3,所以值为3,k是外层的k,值为5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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的值
}
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的值
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内层括号里的k再括号结束后就消失了,最后printf的k是最初定义的k
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询