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

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:25:23
#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啊 到底怎么算的?

这个问题其实比较普遍,主要是优先级和静态变量的问题
优先级:对于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了

a=c++,b++;

这个式子,a的值就是c++的值,c的值在每次进入函数时,都保持上次退出的值。

1. 这条语句 a=c++,b++; 相当于 (a=c++),b++; 这条语句的最终值是 b++
你可以把这条语句改为 printf("%d\n",(a=c++,b++)); 测试一下

2.这条语句 static c=3; 在整个过程中只执行一次,静态全局变量c在main函数结束后销毁,作用相当于把 int c=3; 放到最外层

首先你得搞清楚C语言中“static”这个是什么意思,怎么用。
我们写在多文件的程序时,为了让外部变量的作用域仅限于所在文件,就会用
static来声明。例如,某个程序中要用到大量函数,而当几个函数需要共同使用
几个全局变量时,可以将这几个函数组织在同一个文件中,再将这几个全局变量
定义为静态的,以保证它们不会与其他文件中的变量发生名字冲突,保证文件的
独立性。
你为什么会觉得是3,那是因为你以为“static c=3”在i=0时传给a,但同时c++
了,c已经变成4了,所以当i=1时,a传过去时,c=4就赋给了a。可以理解吗?
static c=3它是会改变的。