懂的各位帮我解答下面这个c语言程序好吗 为什么答案是6不是4呢

[复制链接]
查看11 | 回复3 | 2011-5-7 18:07:42 | 显示全部楼层 |阅读模式
#include
fun3(int x)
{
static int a=3;
a+=x;
return(a);
}
void main()
{
int k=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);
}

回复

使用道具 举报

千问 | 2011-5-7 18:07:42 | 显示全部楼层
fun3 函数中 有一个关键字 static 定义了一个静态全局变量有以下特点:1,该变量在全局数据区分配内存;2,未经初始化的静态全局变量会被程序自动初始化为0 3,静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;可见 static不是来打酱油的第一次 调用fun3 ,a=3+2=5第二次 调用fun3 ,a=5+1=6 (静态全局变量,故值沿用原来的5)
回复

使用道具 举报

千问 | 2011-5-7 18:07:42 | 显示全部楼层
看fun3中的静态变量,静态变量在运行mian前已被初始化,且只初始化这一次首先a=3运行main调用fun3:a=a+2=5;调用fun3:a=a+1=5+1=6;(a因为是静态的,所以每次值都被保存,而不是调用fun3时初始化为3)输出结果
回复

使用道具 举报

千问 | 2011-5-7 18:07:42 | 显示全部楼层
fun3函数里面变量a被定义成静态变量:static,静态变量的作用域是整个文件,在调用时会保持原数值。第一次调用后a=5,第二次调用时a的值从5开始,而不是重新赋值成3。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行