C语言这个程序结果为什么是4

#include<stdio.h>intf(inta){intb=0;staticc=3;a=c++,b++;return(a);}voidmain(){inta=2,i... #include<stdio.h>

int f(int a )
{
int b=0;
static c=3;
a=c++,b++;
return (a);

}

void main()
{
int a=2,i,k;
for(i=0;i<2;i++)
k=f(a++);
printf("%d\n",k);

}

我觉得应该是3啊 到底怎么算的?
展开
 我来答
忻宏盛05
2009-11-21 · TA获得超过133个赞
知道小有建树答主
回答量:148
采纳率:0%
帮助的人:114万
展开全部
这个问题其实比较普遍,主要是优先级和静态变量的问题
优先级:对于a=c++,b++这个语句,最终可以解释成a=c;c=c+1;b=b+1
静态变量:对于static c=3;表面上看是f这个函数里面的局部变量,但是,实际上这个变量是静态变量,也就是说,即使你调用这个函数返回了,但是它的值还是在内存里面没被销毁的,再次调用这个函数的时候,这个值又会被取出来。

所以,当第一次循环后,return的a=3,这个时候c=4了,在第二次循环的时候,a=4,c=5了,return a后,k也应该是4了
匿名用户
2009-11-21
展开全部
a=c++,b++;

这个式子,a的值就是c++的值,c的值在每次进入函数时,都保持上次退出的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友97adf2e
2009-11-21 · TA获得超过226个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:0
展开全部
1. 这条语句 a=c++,b++; 相当于 (a=c++),b++; 这条语句的最终值是 b++
你可以把这条语句改为 printf("%d\n",(a=c++,b++)); 测试一下

2.这条语句 static c=3; 在整个过程中只执行一次,静态全局变量c在main函数结束后销毁,作用相当于把 int c=3; 放到最外层
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PRO的茶里芒果
2009-11-21
知道答主
回答量:30
采纳率:0%
帮助的人:26.6万
展开全部
首先你得搞清楚C语言中“static”这个是什么意思,怎么用。
我们写在多文件的程序时,为了让外部变量的作用域仅限于所在文件,就会用
static来声明。例如,某个程序中要用到大量函数,而当几个函数需要共同使用
几个全局变量时,可以将这几个函数组织在同一个文件中,再将这几个全局变量
定义为静态的,以保证它们不会与其他文件中的变量发生名字冲突,保证文件的
独立性。
你为什么会觉得是3,那是因为你以为“static c=3”在i=0时传给a,但同时c++
了,c已经变成4了,所以当i=1时,a传过去时,c=4就赋给了a。可以理解吗?
static c=3它是会改变的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式