鱼C论坛

 找回密码
 立即注册
查看: 1887|回复: 6

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

[复制链接]
发表于 2022-11-24 22:52:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-24 23:22:30 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-24 23:25 编辑
  1. #include<stdio.h>

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

  10. int f(int a)                                              // 定义函数 f() 为带有一个int 型参数 a 并返回 int 型值的一个函数
  11. {
  12.         auto int b = 0                                  ; // 定义 int 型局部变量 b,并初始化其值为 0,这样,每次调用函数 f(),b 的值都会被初始化为 0 值
  13.         static c = 3                                    ; // 定义 int 型静态变量 c,并初始化其值为 3,静态变量与普通局部变量有所不同,局部变量在每次调用
  14.                                                           // 函数的时候,都会把其值初始化为指定的数值,而且,每一次都一样,例如,b = 0。静态变量就不同了,
  15.                                                           // 静态变量是在程序编译的时候,由编译程序给赋的初值,此后,每次调用函数的时候,如果静态变量的值
  16.                                                           // 被改变了,那么,它的值会一直被保持。例如,上一次调用 c 的值是 9,那么,这一次调用进入函数的
  17.                                                           // 时候,c 的值还是 9
  18.         b = b + 1                                       ; // b = b + 1 = 1 ,b 是普通局部变量,所以,每一次执行完这一句,b 的值一定是 1
  19.         c = c + 1                                       ; // c = c + 1,c 是静态变量,所以,c 的新值是上一回退出时的值加 1,第1次调用 c = 4,第 2 次调用
  20.                                                           // c = 5,第 3 次调用 c = 6
  21.         return a + b + c                                ; // 由于 c 是静态变量,而且,在每一次调用中的值并不相同,所以,函数每一次返回的数值也会有所不同
  22.                                                           // 第1次返回 a + 1 + 4 = a + 5,第2次 a + 1 + 5 = a + 6,第3次 a + 1 + 6 = a + 7,余此类推。
  23. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 11:02:19 | 显示全部楼层
我就是返回值确定不了,程序里面没有表达式说要a,b,c 要相加?且f(a)的内部运算程序中也没有详细说明?不知道f(a)是怎样运算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 13:59:47 | 显示全部楼层
什么说明也不写,只贴个代码,那只能猜了
这个程序可能是用来看局部变量b和静态变量c是怎样工作的
return (a + b + c )时,
第一次调用 ( 2 + 1 + 4 )
第二次调用 ( 2 +1 + 5 )
第二次调用 ( 2 +1 + 6 )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 14:01:23 | 显示全部楼层
把声明写在main的里面真的是不太好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-25 16:56:02 | 显示全部楼层
这个程序就是是用来看局部变量b和静态变量c是怎样工作的,但我现在还是没有搞懂f(a)是怎样运算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-25 21:53:30 | 显示全部楼层
本帖最后由 两手空空儿 于 2022-11-25 22:14 编辑
wsb1991abc 发表于 2022-11-25 16:56
这个程序就是是用来看局部变量b和静态变量c是怎样工作的,但我现在还是没有搞懂f(a)是怎样运算的

  1. int f(int a)
  2. {auto int b=0;
  3. static c=3;
  4. b=b+1;
  5. c=c+1;
  6. return(a+b+c);
  7. }
复制代码

局部变量b只在函数内部存在,出了函数就没有了,所以每次进入函数都会被重新申请
局部静态变量c是在内存的静态区存放,可以把它理解成一个全局变量,出了函数它还是存在的,值被保存了下来,不同的是,只有在函数内才能使用它,在函数之外它是不可见的,
声明语句static c=3只会被执行1次,所以再次跑到这儿的时候是没有c=3这句的
声明和赋值分开,结果是不一样的  
static c;  声明的这句只会执行1次
c = 3;  
好像是,不确定,楼下请更正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 18:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表