首页 > 试题广场 >

以下程序运行后的输出结果是()

[填空题]
以下程序运行后的输出结果是1
int w=2;
int fun(int x)
{
    int y=1;
    static int z=3;
    y++;z++;
    return (x+y+z);}
main( )
{
    int k;
    int w=1;
    for(k=0;k<3;k++)
        printf(“%4d”,fun(w++));
}
在fun()函数中,y是自动存储类变量,z是静态存储变量。y的值在fun()函数调用一次结束后就会被释放,下一次被使用时还是最初的值,即是1;z是静态存储类变量,静态存储类变量的所在函数被调用结束后,其值不会被释放,在下一次调用fun()函数时,仍会沿用上次z的值。故第一次循环时,为1+2+4=7;第二次循环时,为2+2+5=9;第三次循环时,为3+2+6=11。

发表于 2017-07-14 19:38:05 回复(0)
static局部变量显示初始化为非0,内存分配在数据段上;显示初始化为0或者未初始化(系统默认为0)内存分配在bss段,静态局部变量的生命周期是永久性的,直到程序彻底结束,因此每次运行都会保留其结果(内存地址是固定的) 另外static 有两种作用: 1.修饰局部变量:局部变量的生命周期是临时的(内存分配在线上),而静态局部变量的生命周期是永久性的。 2.修饰全局变量和函数:改变链接属性,由原来的外连接变为内链接。 链接属性分:内链接(静态全局变量和静态函数),外链接(全局变量和函数),无链接(局部变量)三种;其主要作用是:尽量避免变量名重名,C++中namespace解决变量名冲突。
编辑于 2017-05-23 18:05:04 回复(0)
被static字段修饰的变量,在整个程序运行阶段只会被定义一次,所以之后的 static int z = 3,都是无效的定义. 函数中,局部变量的优先级比外部变量更高
发表于 2020-11-05 15:59:06 回复(0)
fun中使用的是main中的局部变量,且z变量是静态变量。fun(w++)中,w是后置++,调用完fun后,w的值才是++后的值。
(一般的后置++,例:变量k后置++,在变量k++之前,生成一个临时变量tmp保留该变量k的值,再把该变量k++,返回临时变量tmp.)
k=0->w=1->此时z=4,fun(1)=7->w=2,输出7;
k=1->w=2->此时z=5,fun(1)=9,,->w=2,输出9;
k=2->w=3->此时z=6,fun(1)=11->w=2,输出11;
大概就是这样了,如有错误,望各位大神指教!^_^
发表于 2017-06-26 20:30:17 回复(0)
注意两点:
1、fun(w++)中的w是用的main函数中的局部变量,而非全局变量;
2、fun函数中的z变量是静态变量,存储在静态区,程序运行过程中一直存在,直到程序运行结束。
发表于 2017-05-23 20:34:30 回复(0)
fun(w)++等价于fun(w);w=w+1这两条语句。 而fun(w++)等价于w=w+1;fun(w)这两条语句。 理解了这个就可以得到正确答案了
发表于 2017-06-05 19:41:08 回复(0)
   7   9  11
发表于 2022-01-22 14:35:36 回复(0)
    7    9    11
发表于 2021-12-31 09:30:02 回复(0)
7 9 11

发表于 2021-03-04 22:42:02 回复(0)
   7   9  11
main外,w经过第一次定义值是`2
main内w再次赋值1
w++: w先运算,再自加,所以参与fun函数的w的值依次是1,2,3.
fun函数中y是不变的,z是动态的,因此yz自加前的值分别为1,1,1.
3,4,5
发表于 2020-01-18 15:21:49 回复(0)
7 9 11

发表于 2019-12-24 10:16:11 回复(0)
7911
发表于 2019-09-13 16:23:05 回复(0)
                    
7 9 11
发表于 2019-04-08 20:01:18 回复(0)
int fun(int x)
{
    int y=1;
    static int z=3;
    y++;z++;
    return (x+y+z);}
这个就是说在调用之前就各自Y+和Z++了吗?
发表于 2018-08-11 17:08:52 回复(0)
static是静态变量,只在第一次调用的时候初始化,具有记忆功能
 
w++做函数参数,先将w的值复制给形参,然后再自己加1
发表于 2018-07-05 16:27:22 回复(0)
7911
发表于 2018-05-31 11:28:53 回复(0)
579
发表于 2018-05-07 22:58:16 回复(0)
7911
发表于 2017-09-24 20:11:54 回复(0)
                                   x+y+z
fun(1)时     1+2+4=7
fun(2)时     2+2+5=9
fun(3)时     3+2+6=11

发表于 2017-08-09 14:32:37 回复(0)
7911
发表于 2017-05-23 21:57:37 回复(0)