帮我看看这个C语言程序 答案有2行的 可是我算来算去只有一行 红框离那个b++有什么作用,值还要返回去吗?

如题所述

b++用来将b的值增一。注意fun()里面的数组和b的声明里面有个static,说明他们是静态常量,在第一次fun()执行退出后不会被销毁,第二次执行fun()的时候不会第二次重新被创建。由于有b++且b为静态,所以第二次进去的时候b的值是11,所以会执行fun()里的else语句而不是if里的语句。注意红框上面的printf语句里的/n,就是这个字符导致了输出有两行。fun是void类型的函数,是不返回值的。多看书,对一些小定义要稍微多记忆一下。代码实在不懂的时候上机打代码然后下个断点debug一下,跟着程序走两遍,看看执行的时候各个变量的值是怎么变化的,比死看代码死算效果好很多
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-23
答案应该是:024b=10
0416b=11
这道题目你要考虑到得是静态局部变量的存储方式与作用域。
全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间。
静态变量会被放在程序的静态数据存储区里,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是他与堆栈变量和堆变量的区别。也就是在第一调用fun()函数b++后b=11,在第二次调用 fun()函数不会理会里面的赋值语句。
看一下百度百科这里搜索出来的关于静态变量的例子,里面讲的很详细,例子和你的题目类似!
http://baike.baidu.com/view/675642.htm
第2个回答  2012-02-23
这是一个调用,main()调用两次fun()
要注意的是,数组a,和变量b都是 static型,当b++时,b已经变成了11
当main()再次调用fun()时候,数组a,和变量b的值已经变了。
不懂就自己查查
第3个回答  2012-02-23
输出应该是
02410
041611追问

具体过程怎么样的 第一个答案我会 第二个我就不知道怎么来的 难道B++还要返回到最开始的if那里去

追答

这个题目主要是考察你对静态局部变量的了解。
数组a[]和b都是静态局部变量,在第一次调用fun函数的时候,会初始化赋值,
但是它们的值改变后,再第2次调用fun函数就不会再赋值了,这是静态局部变量的特性。
也就是说第一次a[3] = {0, 1, 2},b = 10.第2次进fun的时候,a[3] = {0,2,4},b = 11.

相似回答