全局变量的值会变吗?

intk=0;voidfun(intm){m+=k;k+=m;printf("m=%dk=%d",m,k++);}main(){inti=4;fun(i++);print... int k=0;
void fun(int m)
{m+=k;k+=m;printf("m=%dk=%d",m,k++);}
main( )
{ int i=4;
fun(i++); printf("i=%dk=%d\n",i,k);
} 为啥第二个k=5
展开
 我来答
zdingyun
推荐于2017-09-13 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48174
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部
全局变量的值在程序运行过程中遇有改变它值的赋值过程,当然会发生变化。
全局变量是编程术语中的一种,源自于变量之分。
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。
参考:
http://baike.baidu.com/link?url=lVcja5pX_Z-x71xIaknG_OX8fUTyoGoWYBGsWh9sFO1ikLT4e-2RPMk-AoA5lRSODEuJ_EdDA2qtIOWz9aAd8q
http://baike.baidu.com/link?url=bqjhW1KsNMeaIEoAvtAOcS5uiCDVMpRSBPfi-Fko2_I3zjiOm9m0KWH3v6COyUKEG1eXX-y1GWHyPf8IBY1z-Rvx8jNlSfc8Eb0HoJeeNT3
萧萧的飞鱼
2011-03-25
知道答主
回答量:9
采纳率:0%
帮助的人:3.4万
展开全部
当程序执行fun(i++)时,此时fun(int m)中实参m的值是4,在printf函数中有k++,此时k值是4,所以打印的值是k,然后再将k++;所以在main函数中的k变成了5。
k++和++k是不一样的。所以你要是改成printf("m=%dk=%d",m,++k);那么在一开始的打印中,就会显示k值为5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_湖心龙
2011-03-25 · TA获得超过242个赞
知道答主
回答量:86
采纳率:0%
帮助的人:57.3万
展开全部
.........语句太不规范。。。看不来。。
再写一遍吧。。
追问
int k=0; 
void fun(int m)
{ m+=k;
k+=m;
printf("m=%dk=%d",m,k++);
}
main( )
{ int i=4;
fun(i++);
printf("i=%dk=%d\n",i,k);
} 为啥第二个k=5
追答
第一行定义的k是全局变量,所以函数fun里的m+=k;与k+=m;都是调用的那个全局变量,而且下次在调用函数fun时的k的值就是上次调用函数fun后的k值。
由此,我们来试运行一下:
=======开始编译=========
全局变量 k 初始化为0!
main函数开始!
局部变量 i 初始化为4!
调用函数fun!
实质:fun(4);
由于“i++”,调用fun后,i == 5
进入函数fun(4):
此时:m=4,k=0
执行“m+=k;”后:
m == 4,k == 0
执行“k+=m;”后:
k == 4,m == 4
输出:m=4k=4
由于你又使用了“k++”,在输出后,k == 5,注意!!此时k为全局变量!!
从fun()跳出!!回到main()!!
由于你没有在main()中定义k,所以这里的k编译器会默认调用全局变量,k == 5
这就是为什么,第二个k=5

关于i++与++i:http://zhidao.baidu.com/question/97757465.html
关于全局与局部变量:http://zhidao.baidu.com/question/106913630.html
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式