
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 怎么理解?
展开
1个回答
展开全部
第一次:
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
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询