wsb1991abc 发表于 2022-11-24 22:52:47

c语言函数返回值为什么是(a+b+c),能不能解释下每句的意思

#include<stdio.h>
int main()
{int f(int)
int a=2,i;
for(i=0;i<3;i++)
   printf("%d\n";f(a)):
return0:
}

int f(int a)
{auto int b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}

jackz007 发表于 2022-11-24 23:22:30

本帖最后由 jackz007 于 2022-11-24 23:25 编辑

#include<stdio.h>

int main()
{
      int f(int)                                    ; // 声明函数 f() 是有一个 int 型输入参数,返回值为 int 型值的一个函数
      int a = 2 , i                                 ; // 定义 int 型变量 a 和 i,并为 a 赋初值 2
      for(i = 0 ; i < 3 ; i ++) printf("%d\n" , f(a)) ; // 循环 3 次,循环变量依次为 i = 0、1、2,循环中,以 a 为实参调用函数 f(),并打印返回值。
                                                          // a 的值为 2,三次调用 f(a) 将分别返回:7,8,9。printf() 将会分 3 行打印输出这三个数值
      return 0                                        ; // main() 是 int 型函数,需要有一个 int 型返回值 0
}

int f(int a)                                              // 定义函数 f() 为带有一个int 型参数 a 并返回 int 型值的一个函数
{
      auto int b = 0                                  ; // 定义 int 型局部变量 b,并初始化其值为 0,这样,每次调用函数 f(),b 的值都会被初始化为 0 值
      static c = 3                                    ; // 定义 int 型静态变量 c,并初始化其值为 3,静态变量与普通局部变量有所不同,局部变量在每次调用
                                                          // 函数的时候,都会把其值初始化为指定的数值,而且,每一次都一样,例如,b = 0。静态变量就不同了,
                                                          // 静态变量是在程序编译的时候,由编译程序给赋的初值,此后,每次调用函数的时候,如果静态变量的值
                                                          // 被改变了,那么,它的值会一直被保持。例如,上一次调用 c 的值是 9,那么,这一次调用进入函数的
                                                          // 时候,c 的值还是 9
      b = b + 1                                       ; // b = b + 1 = 1 ,b 是普通局部变量,所以,每一次执行完这一句,b 的值一定是 1
      c = c + 1                                       ; // c = c + 1,c 是静态变量,所以,c 的新值是上一回退出时的值加 1,第1次调用 c = 4,第 2 次调用
                                                          // c = 5,第 3 次调用 c = 6
      return a + b + c                              ; // 由于 c 是静态变量,而且,在每一次调用中的值并不相同,所以,函数每一次返回的数值也会有所不同
                                                          // 第1次返回 a + 1 + 4 = a + 5,第2次 a + 1 + 5 = a + 6,第3次 a + 1 + 6 = a + 7,余此类推。
}

wsb1991abc 发表于 2022-11-25 11:02:19

我就是返回值确定不了,程序里面没有表达式说要a,b,c 要相加?且f(a)的内部运算程序中也没有详细说明?不知道f(a)是怎样运算的

两手空空儿 发表于 2022-11-25 13:59:47

什么说明也不写,只贴个代码,那只能猜了
这个程序可能是用来看局部变量b和静态变量c是怎样工作的
return (a + b + c )时,
第一次调用 ( 2 + 1 + 4 )
第二次调用 ( 2 +1 + 5 )
第二次调用 ( 2 +1 + 6 )

两手空空儿 发表于 2022-11-25 14:01:23

把声明写在main的里面真的是不太好

wsb1991abc 发表于 2022-11-25 16:56:02

这个程序就是是用来看局部变量b和静态变量c是怎样工作的,但我现在还是没有搞懂f(a)是怎样运算的

两手空空儿 发表于 2022-11-25 21:53:30

本帖最后由 两手空空儿 于 2022-11-25 22:14 编辑

wsb1991abc 发表于 2022-11-25 16:56
这个程序就是是用来看局部变量b和静态变量c是怎样工作的,但我现在还是没有搞懂f(a)是怎样运算的

int f(int a)
{auto int b=0;
static c=3;
b=b+1;
c=c+1;
return(a+b+c);
}
局部变量b只在函数内部存在,出了函数就没有了,所以每次进入函数都会被重新申请
局部静态变量c是在内存的静态区存放,可以把它理解成一个全局变量,出了函数它还是存在的,值被保存了下来,不同的是,只有在函数内才能使用它,在函数之外它是不可见的,
声明语句static c=3只会被执行1次,所以再次跑到这儿的时候是没有c=3这句的
声明和赋值分开,结果是不一样的
static c;声明的这句只会执行1次
c = 3;
好像是,不确定,楼下请更正
页: [1]
查看完整版本: c语言函数返回值为什么是(a+b+c),能不能解释下每句的意思