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?求详细解答,另外staticintz=3怎么... 声明下,这是原题最重要的部分,此处X的值一直为1 ,该函数执行三次return(x*y+z),执行结果为什么是34,54,74?求详细解答,另外 static int z=3 怎么理解? 展开
 我来答
凌雨殁
推荐于2018-03-19 · TA获得超过110个赞
知道答主
回答量:27
采纳率:0%
帮助的人:33.6万
展开全部
第一次:
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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式