int f(int x) {int y=1; static int z=3; y=y+10; z=z+20; return(x*y+z);}

声明下,这是原题最重要的部分,此处X的值一直为1 ,该函数执行三次return(x*y+z),执行结果为什么是34,54,74?求详细解答,另外 static int z=3 怎么理解?

第一次:
y=1;
z=3;
y=y+10; // y = 11
z=z+20; //z =23
return 11*1+23;
所以第一次34;

第二次:
y=1;
z=23;
y=y+10; // y = 11
z=z+20; //z =43
return 11*1+43;
所以第二次54;

第三次:
y=1;
z=43;
y=y+10; // y = 11
z=z+20; //z =63
return 11*1+63;
所以第二次74.

具体原因就是你的问题:
static int z=3 。这句话引起的。
z是函数内部的局部变量,在局部变量之前加上static关键字,就会
变成静态局部变量。

静态局部变量有以下特点:

1.该变量在全局数据区分配内存;
2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;   
3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
4.它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

所以,每一次Z的值都是上一次最后得到的值,不想Y,每次都被置为1
温馨提示:内容为网友见解,仅供参考
无其他回答

...int z=3; y=y+10; z=z+20; return(x*y+z);}
return 11*1+23;所以第一次34;第二次:y=1;z=23;y=y+10; \/\/ y = 11 z=z+20; \/\/z =43 return 11*1+43;所以第二次54;第三次:y=1;z=43;y=y+10; \/\/ y = 11 z=z+20; \/\/z =63 return 11*1+63;所以第二次74.具体原因就是你的问题:static int z=...

...int fun(int x) { int y=1; static int z=4; z+=1;++y; return(x+...
z是静态变量,所以第一次调用fun时的值为4,第二次为5,第三次为6!而y是局部变量,每次调用fun时的值都是1!所以结果是8 , 10 ,12

...程序执行结果,#include <stdio.h> int fun(int x) { int y=1...
注意z的类型是static的,所以z的值是固定的!

int main() {int x=10; int y=x++; printf("%d,%d\\n",(x++,y),y++...
也可能先算完整个y++再算(x++, y)则输出变成11,10了,依赖于编译器,不必深究。

...void main() { int x,y; for (x=1,y=1;x+y<=100;x++,y++)
\/*你判断的是*\/(x%10==0)\/*但你输出的是*\/x+y \/*应该改成*\/((x+y)%10==0)

c语言求教
详情请查看视频回答

...fun(int x, int y) {int z; z=x>y?x:y; return(x+z); } main...
a-b=5,b+c=4 fun(5,4)即x=5,y=4,执行fun函数 由z=x>y?x:y 得z=5,return(x+z);得最后的值为5+5=10 还不懂的话就加我的QQ602356234

...int a=2; int f(int n) {static int a=3; int t=0; if(n%2){stat...
程序运行后的输出结果是 __29___。选答案C

int main() {int x=10; int y=x++; printf("%d,%d\\n",(x++,y),y++...
(x++, y)它是一个逗号表达式,整个表达式的结果是最后一个表达式即y的值。

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

相似回答