首页 > 试题广场 >

执行如下代码后输出结果为( ) i...

[单选题]
下面程序输出为()
#include <stdio.h>
int fun(int a) {
    int b = 0;
    static int c = 3;
    b++;
    c++;
    return (a+b+c);
}

int main( ) {
    int i=0;
    for(; i < 3; i++)
        printf("%d",fun(2));
    return 0;
}



  • 777
  • 789
  • 7911
  • 71320
注意题目中的static关键字,声明静态局部变量时该局部变量会暂时保存到内存的静态区(所以即使这个函数运行结 束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值);理解了这个知识点,就不难得出789的结果了。欢迎讨论
发表于 2019-10-18 15:37:55 回复(0)
static是静态变量声明,这个关键字会让c保存上一次调用的值,而b不会保存,每一次调用都是1,所以如下: 第一次调用c等于4,a+b+c=2+1+4=7 第二次调用c等于5,a+b+c=2+1+5=8 第二次调用c等于6,a+b+c=2+1+6=9 答案为789
编辑于 2021-10-02 13:24:47 回复(0)
加了static关键字,c就是静态变量:若c在函数内部进行定义,则只在第一次调用fun()时赋初值。这样一来,第一次赋初值后 c=3 ,而后c++,c变为4。而第二次调用fun()时,不会再使用c=3这个赋值语句啦,c自然就是在4的基础上做运算。如此一来,每调用一次,c的值就增1。
而对于未加static关键字的变量b,每调用一次fun()函数b都要重新赋值为0,如此看来,b始终在0的基础上做运算。
编辑于 2020-03-21 11:26:50 回复(0)

这道题四个选项都是错的,答案应该是2和5,2应该没有人有疑问。

5是怎么得来的?很简单,&a+1对数组名取址是一下子对整个数组进行加1,即是a[4]的下一个元素地址,这个时候再减1取值就是a[4]的值即5了

发表于 2019-08-24 20:39:08 回复(1)
static:静态变量,分为静态局部和静态全局。 (1)静态局部变量:它和局部变量的区别在于函数退出时,变量始终存在,但不能被其他函数使用,当再次进入该函数时,能保存上次的结果继续使用。如果不赋初值,则自动赋初值0或空字符。 (2)静态全局变量:只在定义它的源文件中可见,在其他源文件中不可见。它和全局变量的区别是,全局变量可以使用关键字extern被其他源文件使用,而静态全局变量不能。
发表于 2022-06-06 16:42:49 回复(0)
局部变量c已经声明为static,所以在程序执行期间它所占据的内存单元时不变的,在fun()函数返回时,变量c不会丢失其值
发表于 2021-05-20 20:40:57 回复(0)
这题答案就是789啊,为什么感觉解析跟题不对应呢😂😂
发表于 2019-10-09 21:01:21 回复(0)
感觉选项有问题的。i++不是后置递增么?b的每次调用不应该都是0么?c的三次循环不应该分别是3,4,5。感觉答案是:5,6,7
编辑于 2024-03-06 19:40:49 回复(0)
static是静态变量声明,这个关键字会让c保存上一次调用的值,而b不会保存,每一次调用都是1,所以如下: 第一次调用c等于4,a+b+c=2+1+4=7 第二次调用c等于5,a+b+c=2+1+5=8 第二次调用c等于6,a+b+c=2+1+6=9 答案为789
发表于 2022-05-01 15:10:08 回复(0)
题中局部变量c是静态变量,静态变量和全局变量一样保存在静态数据区,其生命周期不随函数的结束而结束,而其他变量当函数结束时,他们的生命周期也将结束,所以变量c++后,会继续保存在静态区,而其他变量经历结束-重启、结束-重启的过程
发表于 2022-04-20 11:57:06 回复(0)
尽管c为static静态变量,但它仍旧是一个局部变量。
发表于 2022-02-19 13:20:46 回复(0)
如果在第五行下面加一句c=3,那答案就是777
发表于 2021-02-03 02:05:28 回复(0)
Static(静态变量)是一直进行改变的,题中定义c为静态变量,调用函数3次,c的值每次都加1
发表于 2019-11-01 09:19:57 回复(0)
这个题我看到选项都是懵的,怎么算都得不到选项结果
发表于 2019-08-29 08:30:41 回复(0)
选项都是错的
发表于 2019-08-23 08:33:35 回复(0)