c语言静态变量的题目,明天考试所以请今晚之前回答,先谢谢了!!

#include<stdio.h>
int a;
int fun(int b)
{
static int c=3;
return((++a)+(++b)+(++c));
}

main()
{
int a=2,i;
for(i=0;i<2;i++)
printf("%d",fun(a));
getch();
}

问输出结果为多少
一楼的静态变量解释我知道,但第一次进入函数不是应该returnreturn((++a)+(++b)+(++c))

((2+1)+(2+1)+(3+1))=10吗?

只需要搞清楚一点,主函数里的变量a和fun(b)函数里的变量a并不是同一个值,主函数里的a在把值传递给fun函数中的形参b之后,整个函数的运算就与它无关了。而fun函数里的a就只能是全局变量a了,其默认值为0。
静态变量c你应该很清楚吧,经过一次函数调用后它的值变为4,等第二次函数调用时它就还是4。
以下的运算结果大伙儿已经说得很清楚了。
所以第一次是((0+1)+(2+1)+(3+1))=8
此时全局变量a=1,静态变量c=4
第二次是((1+1)+(2+1)+(4+1))=10
所以结果是8 10

呵呵,祝你明天考试顺利。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-07
810
静态变量就是static int c=3;该语句只在第一次碰到的时候给他赋初值,以后再执行到这里时直接跳过不再再赋值,而如果没有static则每次执行到这里都会给c赋初值3

#include<stdio.h>
int a;
int fun(int b)
{
static int c=3;
printf("a=%d,b=%d,c=%d",a,b,c);
return((++a)+(++b)+(++c));
}

main()
{
int a=2,i;
for(i=0;i<2;i++)
printf("%d",fun(a));//a,有问题,这里的a传到调用函数里,把 2传给b之后,这个a在b
//里面没有用了,你说一下你的目的吧
}
第2个回答  2010-05-07
returnreturn((++a)+(++b)+(++c))
里的a不是主函数里的a(主函数里的a是局部变量,此时并无引用的fun函数里),而是前面的全局变量a,默认为0
所以第一次是((0+1)+(2+1)+(3+1))=8
此时全局变量a=1,静态变量c=4
第二次是((1+1)+(2+1)+(4+1))=10
所以结果是810
第3个回答  2010-05-07
我没有运行,但觉得这程序有问题
全局变量a并没有初始化,初始化的是main函数的局部变量a
因为全局变量a没有初始化,程序的值应该是不确定的
第4个回答  2010-05-07
fun函数里面的a不是主函数里面定义的那个a=2 而是程序一开始#include后面那句int a;定义的那个a 那个a是个全局变量 你定义的时候没有附初值那这个变量就默认是0 所以第一次调用函数是((0+1)+(2+1)+(3+1))=8

另外回答楼上仁兄的疑惑 在所有函数外面定义int a;是全局的也是静态的。虽不同于static int a;但它仍然是一个静态存储类型的变量。静态存储类型的int变量不赋初值的时候默认会存0。
第5个回答  2010-05-07
我觉得关键在这里,首先得确定return((++a)+(++b)+(++c));里各变量的值,那个a应该是全局变量,即第二行的a,系统自动为其赋初值0, ((2+1)+(2+1)+(3+1))=10,你把a对应的2换成0,结果就不难理解了。
你还可以这样验证,在第二行为a赋值,如int a=1,输出的结果就9 11。这题可能的一个考察点为全局与局部变量的区别,fun函数里的a应来自全局变量,而非main函数里的a
我也刚刚研究了几十分钟才看明白
相似回答
大家正在搜