首页 > 试题广场 >

在上下文和头文件正常的情况下,以下代码输出的值是:

[单选题]
在上下文和头文件正常的情况下,以下代码输出的值是:
int x = 4;
void incre() {
    static int x = 1;
    x *= x + 1;
    printf("%d", x);
}
int _tmain(int argc, _TCHAR *argv[]) {
    int I;
    for (i = 1; i < x; i++) {
        incre();
    }
    return 0;
}

  • 2642
  • 2
  • 4
  • 5
static只会初始化一次。首先是1*2输出2,然后2*3输出6,最后是6*7输出42。



也就是说,其实局部变量的作用域只是在incre这个函数里面而已。
编辑于 2017-08-21 16:20:03 回复(3)
static初始化一次,使得函数结束时局部变量x不被释放,下一次使用函数时x使用上次的值
此外局部变量会覆盖全局变量
发表于 2017-09-12 09:19:57 回复(0)
首先,主函数的for循环条件的x为全局变量4,所以该for循环会执行3次,即调用三次incre()函数;
再看incre()函数体,其中定义了一个局部静态变量x,初始化为1;
需要注意的是incre函数最后输出没有换行\n,即三次打印结果为一行;
当第一次调用incre函数时,x = x*(x+1) = 1* 2 = 2;
当第二次调用incre函数时,x = x*(x+1) = 2* 3 = 6;
当第三次调用incre函数时,x = x*(x+1) = 6* 7 = 42;
由于三次打印结果在同一行,所以结果为:2642.
发表于 2019-09-01 10:24:55 回复(0)
int x=4 不变,for循环执行3次,调用3次incre()方法,在incre()方法里面的x变量的值一直在变。
每次调用incre()就执行一次 x=x*(x+1);
第一次:x=1*(1+1)=2
第二次:x=2*(2+1)=6
第三次:x=6*(6+1)=42
发表于 2018-01-16 14:33:44 回复(1)
for循环里的x一直是4,不变,incre里的x一直在变
发表于 2017-08-13 11:38:40 回复(0)
全局变量x作用域是整个文件;静态局部变量x作用域只在incre()函数,并且屏蔽同名的全局变量x。(它们的生存期都是从开始创建到程序运行结束)
发表于 2018-01-16 11:04:23 回复(0)

我来说一下优先级方面的把:

x*=x+1 其中:x+1是算术运算符,优先级应该高于*=

发表于 2017-09-11 15:38:12 回复(0)
局部变量的x与外部变量的x互不干扰
发表于 2019-03-08 11:01:50 回复(0)
完全没有get到出题点
发表于 2018-05-28 23:06:10 回复(0)
因为是static变量,所以函数结束时没有背释放
发表于 2017-10-10 15:33:14 回复(1)

看到循环4次就选A了,^_^

发表于 2017-09-01 17:37:12 回复(0)
cct头像 cct
请问incre()第二次执行时,它怎么知道x=2? 
static int x=1; 只执行1次什么意思,第二次调用函数就没有这一句了吗,
那就该调用全局变量x=4啊,为什么会是局部变量x=2?
发表于 2017-08-27 19:47:38 回复(2)

知识点1:同一作用域下,全家变量和局部变量的变量名相同,局部变量优先。当然同一作用域下没有局部变量只能使用全局变量。
知识点2:static修饰局部变量,会提高局部变量的生命周期,到程序结束为止。也就是说出函数不会销毁,每次循环x的值都会不断变化。

发表于 2022-11-25 23:27:43 回复(0)
static只会执行一次
发表于 2017-08-13 09:14:35 回复(0)
static 声明的变量为静态变量,放在静态存储区,生命周期为整个程序运行时间,即在程序结束前不会消失和重新声明,一直保持原来的值,直到再次改变。
发表于 2023-06-17 01:42:58 回复(0)
这题主要考点在static静态保存值,而不会每次进函数变量重新被赋值1
发表于 2022-03-21 10:47:27 回复(0)
应该是2642,42只是第三次输出的值,应该是答案不存在🤣
发表于 2021-09-16 11:21:34 回复(0)
醉了。看的我懵逼 明明输出了3个 出的啥题,能表达清楚吗
发表于 2021-07-31 23:14:45 回复(0)
static int x=1是在函数void incre()内部被定义的,只有在函数被调用的过程中生效;已经有一个被定义的全局变量x=4,所以即是for(i=1;i<4,i++){} x *=x+1即:x=x(x+1) 经三次循环得到42
发表于 2021-07-23 01:00:44 回复(0)
答案没有一个对的
发表于 2021-07-19 10:31:47 回复(0)