#include <stdio.h> int x=1; f(int a,int b) {static int x=3; int c=4,z; extern y; z=(++x)+(y++)+(a++

#include <stdio.h>
int x=1;
f(int a,int b)
{static int x=3;
int c=4,z;
extern y;
z=(++x)+(y++)+(a++)+b+(c++);
return z;
}
extern int y;
main()
{int x=3,w;
w=f(x,y);
printf("%d ",w);
w=f(x,y);
printf("%4d\n",w);
getch();
}
int y=2;

输出结果为 15 18
想问问为什么第二个是18?

还有想问问如果不要了static的话,那么就是 15 17
能不能也解释一下呢?

辛苦了
都运行得了了,哪有错误
再何况这是试题来的

运行结果就是 15 18

结果15 18没错
这个程序有2个主要的知识点
1 用extern声明外部变量,所以就算把int y=2放到程序的最后,也可以。
2 static声明局部变量,可以使局部变量的值在函数调用结束后不消失而保留原值。
具体分析过程
程序有2次调用f函数
第一次第调用时
f(3,2) z=(++x)+(y++)+(a++)+b+(c++);
z=4 + 2 +3 +2+ 4=15
执行后 x=4 y=3
第2次调用f函数时
f(3,3) 而由于f函数中x是static局部变量,所以第二次调用f时,x还保留上一次的值4
所以 z=(++x)+(y++)+(a++)+b+(c++);
z= 5 + 3 +3 +3 +4=18
所以结果是15 18
而假如在f函数中把x的static去掉,则在第二次调用f时,x就会重新用3来初始化,不会保留原来4的值,所以不要了static的话,那么就是 15 17
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-13
程序各种错误...修改好了..再传上来吧..
第四行,六行,17行,最后一行都有问题...

#include <stdio.h> int fun(int a) { int b=0; static int c=3...
a=(c++,b++);由于(c++,b++)中用了逗号,逗号作为运算符时返回最后的表达式值,所以这句相当于a=b++,由于++在后,所以这又相当于a=b;所以返回0

#include<stdio.h> main() {int x=3,y=
自增与自减运算符可在变量的左边(前缀)与右边(后缀),运算规则教材上有的,手机打字很麻烦

#include <stdio.h> int f(int a) { int b=0; static int c=3; a=c...
include <stdio.h> int f(int a){ int b=0;static int c=3;\/\/静态变量,只做一次初值赋值,即:第一次调用fun c=3 a=c++,b++; \/\/第一次调用本函数后,c=4,第二次后,c=5,第三次后c=6...return a; \/\/第一次调用本函数后,a=3,二次后,a=4,第三次后a=5...} ...

#include<stdio.h> f(int a) { int b=0; static int c=3; a=c++,b+...
首先f函数中的c是一个静态变量,生命周期是全局的,这里c的3是以初值形式赋予的,所以只有第一次执行f()的时候赋为3,所以执行循环的时候:i=0时,a=2,先取值后++,f(2),a=3;f函数内a=c++,先取值后++,a=3(这个a的作用于在函数f内,不影响外部的a),c=4,最后的a被return给k;k=...

#include <stdio.h> int fun(int a) {int b=0;static int c=3; b++...
答案是789,如果你在输出里面加上一个空格的话就是 7 8 9,完。

#include<stdio.h> void main() { int f(int a, int
p=f(i,++i); 在执行这一步时i编程了3,所以传入函数f时a和b都等于3返回值为0 ++i时i的值就变了。改为p=f(i,i+1)就好了

#include<stdio.h>int f(int a){int b=0;static int c=3;b++;c++;r...
答案 : 7 8 9 过程 此题考查静态局部变量 加了static的静态局部变量在函数调用以后内存没有释放(因为static修饰的局部变量内存分配在全局区(也叫静态区),未使用static关键字修饰的局部变量内存分配在栈区(栈区的生命周期是函数结束之后)),因为c被static关键字修饰,所以下次进入此函数,c的值是...

#include<stdio.h> main() int max(int a,int b); { int zds; zds=a>...
在任何一个C语言的程序中,主函数main()只能写一次的,你这个里面写了两次主函数main()

...#include <stdio.h> int fun(int x) { int y=1;
输出结果:8 10 12 此处每个数字间要留2个空位 注意z的类型是static的,所以z的值是固定的!

#include <stdio.h> void main() { int a=1,b=3,c=5,d=4,x=3; if...
这个就是先判断a<b成立执行判断c>d成立,就执行x=1,所以最后输出1 另外,虚机团上产品团购,超级便宜

相似回答