元武 发表于 2021-9-12 11:16:03

代码纠错

照着小甲鱼的视频敲的,自己也找了好多遍,没发现错误。
看弹幕好像也有一部分人碰到了这种情况,希望知道为什么,并如何改进

wp231957 发表于 2021-9-12 11:32:23

发文本代码

人造人 发表于 2021-9-12 11:39:03

sum 函数的第一个参数 n,指定后面有几个参数
result = sum(5, 1, 2, 3, 4, 5);

还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴

元武 发表于 2021-9-12 13:29:43

人造人 发表于 2021-9-12 11:39
sum 函数的第一个参数 n,指定后面有几个参数




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

int sum(int n,...);

int sum(int n,...)
{
      int i,sum=0;
      va_list vap;

      va_start(vap,n);
      for(i=0;i<n;i++)
      {
                sum+= va_arg(vap,int);
      }
      
      va_end(vap);

      return sum;
}

int main()
{
      int result;

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

      printf("%d",result);

      return 0;
}

jhq999 发表于 2021-9-12 14:38:21

我用了指针
#include <stdio.h>
//#include <stdarg.h>

int sum(int n,...);

int sum(int n,...)
{
      if(n<1) return n;
      int *i=&n+1,sum=0;
      
      while(n-->0)
      {
                sum+= i;
      }
      
      

      return sum;
}

int main()
{
      int result;

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

      printf("%d",result);

      return 0;
}

元武 发表于 2021-9-13 07:02:54

jhq999 发表于 2021-9-12 14:38
我用了指针

首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候,能够简单讲解这两行代码呢?int *i=&n+1以及sum+= i;

jhq999 发表于 2021-9-13 11:55:30

本帖最后由 jhq999 于 2021-9-13 12:08 编辑

元武 发表于 2021-9-13 07:02
首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候, ...

前面人造人大神告诉你了参数n必须是后面参数的个数,你知道什么原因了吧?其实n后面参数就在参数n的后面,既然知道参数n的位置,再加上知道后面参数的个数当然就知道后面参数的值。
int *i=&n+1
i就是后面第一个参数指针
sum+= i;
这里是用了数组和指针的转换关系;
你应该在动态数组时就学到了吧。
建议:学完c,学汇编,你再回来看C你会豁然开朗的

元武 发表于 2021-9-13 15:38:50

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

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