全局变量的值会变吗?
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 展开
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 展开
3个回答
推荐于2017-09-13 · 知道合伙人软件行家
关注
展开全部
全局变量的值在程序运行过程中遇有改变它值的赋值过程,当然会发生变化。
全局变量是编程术语中的一种,源自于变量之分。
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如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
全局变量是编程术语中的一种,源自于变量之分。
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。在指令式语言中,变量通常是可变的;但在纯函数式语言(如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
展开全部
当程序执行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
k++和++k是不一样的。所以你要是改成printf("m=%dk=%d",m,++k);那么在一开始的打印中,就会显示k值为5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.........语句太不规范。。。看不来。。
再写一遍吧。。
再写一遍吧。。
追问
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询