C语言的问题,麻烦高手!

#include <stdio.h>int a=1;int f(int c){ static int a=2; c=c+1; rerurn (a++)+c;}main(){ int i,k=0; for(i=0;i<2;i++) {int a=3;k+=f(a);} k+=a; printf("%d尀n",k);}这个程序运行的结果是14,是怎么来的?特别是rerurn (a++)+c;是什么意思,请高手作答!!
2026年09月24日 10:07
有4个网友回答
网友(1):

int a=1; //全局变量

int f(int c)
{
static int a=2; //静态变量,函数结束值不变
c=c+1;
return (a++)+c; //返回a加上c的值,即2+c,然后a的值自加变为3
}
void main()
{
int i,k=0;
for(i=0;i<2;i++)
{
int a=3; //局部变量
k+=f(a); //第一次循环得0+3+1+2,第二次循环得6+3+1+3,循环后k的值为13
}
k+=a; //加上全局变量的a,13+1=14
printf("%d\n",k);
}

网友(2):

#include
int a=1;
//全局变量a=1,只要不是在子函数内,a的值都是他
int f(int c)
{ static int a=2; //局部静态变量a=2,在本函数内,a使用后不复原
c=c+1;
rerurn (a++)+c; //返回a+c的值,然后a再加1
}
main()
{ int i,k=0;
for(i=0;i<2;i++)
{int a=3;//局部变量,只是作用在定义的语句内
k+=f(a);}
k+=a;
printf("%d\n",k);
}
分析:
i<2;循环了2次;
第1次:
f(a)=f(3)::c=c+1=3+1=4;(a++)+c=2+4=6(其中,f(3)是用的局部变量
,c=c+1用的是函数参数a传的值,a++是用的局部静态变量,而且结束后,局部静态变量自己加1,static a=3;)
返回来k=k+f(a)=0+6=6;
第2次:
f(a)=f(3)::c=c+1=3+1=4;(a++)+c=3+4=7;
返回来k=k+f(a)=6+7=13;
退出循环:
k+=a;k=k+a=13+1=14(这里的a是全局变量了,定义在main()之外)
所以是14

网友(3):

- -
返回值是在子函数中运算后的a+1+c
由于static所以每次进入子函数不需要重新赋值给a
这些知识点教科书上面都有介绍的应该
还有是return不是rerurn
(a++)+c应该是在关于赋值的章节里面的,如果有教材的话一般在第二章
static大概在第六到第七章中是有关函数的章节中比较靠后的知识点

网友(4):

二楼讲得很详细补充一点学C用谭浩强的书较好 这题综合性强 静态全局局部大概在第六章讲完