注册 登录
编程论坛 C语言论坛

这个要怎么解释,分析下面程序的运行结果,并分析原因。

清风萨克斯 发布于 2021-01-02 13:21, 1562 次点击
int x=6,y=5;

int fun_1(int a,int b)
{
static int x=1;
++a;
x+=a+b;
return x;
}
int main()
{
int x=10;
int i;
for(i=0;i<2;i++)
printf("%d\t",fun_1(x,y));
}

1 回复
#2
风过无痕19892021-01-02 16:01
回复 楼主 清风萨克斯
程序代码:

#include<stdio.h>
int x = 6, y = 5;

int fun_1(int a, int b)
{
    static int x = 1;// 将 x 定义成静态局部变量,并赋初值为1,(静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变,
                     
// 所以,第二次循环回来,x = 17)
    ++a;             // 将接收的实参 x = 10 传递来的数自增1,即 a = 11
    x += a + b;      // 循环第一次相当于:x = 1 + a + b = 1 + 11 + 5 = 17;循环第二次相当于:x = 17 + a + b = 17 + 11 + 5 = 33
    return x;        // 返回 x
}
int main()
{
    int x = 10;
    int i;
    for (i = 0;i<2;i++)
        printf("%d\t", fun_1(x, y));
}
1