int i=100; int fun() {static int i=10; return ++i;} void main () { fun(); cout<<fun<<","<<i<<endl;

如题所述

int i=100;
int fun() {static int i=10; return ++i;}
void main () { fun(); cout<<fun()<<","<<i<<endl;
理解成这样了
输出为12, 100
int i=100;定义了全局变量i,其在之后代码中都有效,除非有某个模块中又声明了同名的变量i
static int i=10; 声明了静态变量i,该i只在fun函数中有效,且在fun中全局i无效,静态变量在fun函数退出后继续保存,下次fun在执行时直接读取保存的值
main中,先执行fun(),静态i变为11,并保存,第二次fun()时,返回++i = ++11 =12,同时静态i变为12, 但cout中的后一个i不在fun中,所以实际使用的是全局i,所以输出结果为12,100
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-01
cout<<fun<<","<<i<<endl;这句中fun因为是一个函数名,返回值总是1(我用的C-Free5.0).所以你看到的结果总是"1,100".你可以将这句的fun改为fun(),这样你可以看到结果为"12,100"因为之前你调用过一次fun().
第2个回答  2011-07-06
#include<string.h>
#include <stdio.h>
int i=10;
int fun();
void main()
{
int j=1;/*j在这里j=10*/
j=fun();/*j=10*/
printf("%d,",j);
j=fun();/*j在这里j=20*/
printf("%d",j);
getchar();
}
int fun()
{
int k=0;
k=k+i;
i=i+10;/*第一次调用fun()i在这里i=20;第二次调用fun(),i=30*/
return (k);/*第一次调用fun(),k在这里k=10;第二次调用fun(),k在这里k=20;*/
}
另外,站长团上有产品团购,便宜有保证