鱼C论坛

 找回密码
 立即注册
查看: 838|回复: 7

[已解决]代码纠错

[复制链接]
发表于 2021-9-12 11:16:03 | 显示全部楼层 |阅读模式

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

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

x
照着小甲鱼的视频敲的,自己也找了好多遍,没发现错误。
看弹幕好像也有一部分人碰到了这种情况,希望知道为什么,并如何改进
最佳答案
2021-9-12 11:39:03
sum 函数的第一个参数 n,指定后面有几个参数
  1. result = sum(5, 1, 2, 3, 4, 5);
复制代码


还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴
屏幕截图 2021-09-12 110647.png
屏幕截图 2021-09-12 110612.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-12 11:32:23 From FishC Mobile | 显示全部楼层

回帖奖励 +10 鱼币

发文本代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-12 11:39:03 | 显示全部楼层    本楼为最佳答案   
sum 函数的第一个参数 n,指定后面有几个参数
  1. result = sum(5, 1, 2, 3, 4, 5);
复制代码


还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-12 13:29:43 | 显示全部楼层
人造人 发表于 2021-9-12 11:39
sum 函数的第一个参数 n,指定后面有几个参数

原来是这样,明白了,谢谢你(另外测试一下发文本代码)
  1. #include <stdio.h>
  2. #include <stdarg.h>

  3. int sum(int n,...);

  4. int sum(int n,...)
  5. {
  6.         int i,sum=0;
  7.         va_list vap;

  8.         va_start(vap,n);
  9.         for(i=0;i<n;i++)
  10.         {
  11.                 sum+= va_arg(vap,int);
  12.         }
  13.         
  14.         va_end(vap);

  15.         return sum;
  16. }

  17. int main()
  18. {
  19.         int result;

  20.         result = sum(5,1,2,3,4,5);

  21.         printf("%d",result);

  22.         return 0;
  23. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-12 14:38:21 | 显示全部楼层
我用了指针
  1. #include <stdio.h>
  2. //#include <stdarg.h>

  3. int sum(int n,...);

  4. int sum(int n,...)
  5. {
  6.         if(n<1) return n;
  7.         int *i=&n+1,sum=0;
  8.       
  9.         while(n-->0)
  10.         {
  11.                 sum+= i[n];
  12.         }
  13.         
  14.         

  15.         return sum;
  16. }

  17. int main()
  18. {
  19.         int result;

  20.         result = sum(5,1,2,3,4,5);

  21.         printf("%d",result);

  22.         return 0;
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-13 07:02:54 | 显示全部楼层

首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候,能够简单讲解这两行代码呢?
  1. int *i=&n+1
复制代码
以及
  1. sum+= i[n];
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 11:55:30 | 显示全部楼层
本帖最后由 jhq999 于 2021-9-13 12:08 编辑
元武 发表于 2021-9-13 07:02
首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候, ...


前面人造人大神告诉你了参数n必须是后面参数的个数,你知道什么原因了吧?其实n后面参数就在参数n的后面,既然知道参数n的位置,再加上知道后面参数的个数当然就知道后面参数的值。
  1. int *i=&n+1
复制代码

i就是后面第一个参数指针
  1. sum+= i[n];
复制代码

这里是用了数组和指针的转换关系;
你应该在动态数组时就学到了吧。
建议:学完c,学汇编,你再回来看C你会豁然开朗的

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-13 15:38:50 | 显示全部楼层
jhq999 发表于 2021-9-13 11:55
前面人造人大神告诉你了参数n必须是后面参数的个数,你知道什么原因了吧?其实n后面参数就在参数n的后 ...

是这样的,
首先“参数n必须是后面参数的个数”这个事实由人造人大神提点后明白了,但为什么是这样还不太清楚。
特别后面小甲鱼的作业中,似乎第一个参数也可以是指针,我查了下csdn发现“va_start宏,获取可变参数列表的第一个参数的地址”,好像和“”n必须是后面参数的个数”有些出入。
不过关于我向你提问的两行代码经过你的讲解已经明白了,非常感谢你。
关于学完c后学汇编的额外建议我也非常感谢,会去了解相关内容的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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