peterz6175 发表于 2018-5-29 00:00:07

stdarg代码全部照搬,怎么结果出来不一样呢?

#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;
}
main()
{
        int result;
       
        result = sum(2,3,4,5);
        printf("result= %d\n", result);   //这里反馈数字为7
        result = sum(1,1,1,1);
        printf("result= %d\n", result);   //这里反馈结果为1?

}
我全部代码都是照搬的啊?检查过了很多次,没有错啊。为什么结果反馈不对呢?用的DEV-C++

小名明SIU 发表于 2018-5-29 10:04:13

改成result = sum(3,3,4,5);   result = sum(3,1,1,1);试试

peterz6175 发表于 2018-5-29 21:57:56

小名明SIU 发表于 2018-5-29 10:04
改成result = sum(3,3,4,5);   result = sum(3,1,1,1);试试

还是不行,改成3345,和3111的话,返回值是12和3. 难道是编译器问题?我代码都是照搬小甲鱼视频的啊,不会错的

人造人 发表于 2018-5-29 22:14:31

peterz6175 发表于 2018-5-29 21:57
还是不行,改成3345,和3111的话,返回值是12和3. 难道是编译器问题?我代码都是照搬小甲鱼视频的啊,不 ...

int sum(int n, ...);
这个 int n 是做什么用的?
为什么不直接写 int sum(...);
为什么?

printf("%d %d %d\n", a, b, c);
printf是如何知道有多少个参数的?



为什么没有输出变量d
为什么 ?

小名明SIU 发表于 2018-5-30 09:00:06

int sum(int n, ...) 按照你的代码n是参数个数,printf是根据格式化字符串中的%多少确定参数个数

peterz6175 发表于 2018-5-30 13:26:38

人造人 发表于 2018-5-29 22:14
int sum(int n, ...);
这个 int n 是做什么用的?
为什么不直接写 int sum(...);


你这个只是打出数字啊,小甲鱼视频里是利用stdarg打出运算结果。。。

peterz6175 发表于 2018-5-30 13:31:50

本帖最后由 peterz6175 于 2018-5-30 21:09 编辑

{:10_265:}

人造人 发表于 2018-5-30 15:41:47

peterz6175 发表于 2018-5-30 13:31
这是是利用stdarg求main函数里sum括号里的和,,我又检查了一遍代码。和小甲鱼视频里是一样的。为什么mai ...

int sum(int n, ...);

你告诉我,这个 int n 是做什么用的?

peterz6175 发表于 2018-5-30 20:00:20

人造人 发表于 2018-5-30 15:41
int sum(int n, ...);

你告诉我,这个 int n 是做什么用的?

int sum(int n, ...);
定义一个sum函数,这个sum函数是一个可变参数的函数,它的第一个参数(int n)是指定后面有多少参数,这里用{...}作为占位符表示参数数目不确定,这是符合C语言语法的,这里的n如果是3的话,就说明后面有3个参数求和,如果n是5的,就说明后面有5个参数,求5个参数的和。。

这是小甲鱼视频里的原话,我拷贝过来的。初学者好多东西都不懂,但是我是完全按照教学视频操作的,不明白为什么不可以正常运行。我怀疑是不是编译器的不同导致的。。

peterz6175 发表于 2018-5-30 20:06:06

人造人 发表于 2018-5-30 15:41
int sum(int n, ...);

你告诉我,这个 int n 是做什么用的?

不纠结了。代码我理解错了,好低级的错误{:10_249:}

peterz6175 发表于 2018-5-30 20:07:31

人造人 发表于 2018-5-30 15:41
int sum(int n, ...);

你告诉我,这个 int n 是做什么用的?

第一个参数n是代表后面有多少个参数而已啊,从第二个开始才是求和,我这理解能力{:10_285:}

peterz6175 发表于 2018-5-30 20:09:50

小名明SIU 发表于 2018-5-29 10:04
改成result = sum(3,3,4,5);   result = sum(3,1,1,1);试试

谢谢。明白了,我把N这个参数的作用没理解对
页: [1]
查看完整版本: stdarg代码全部照搬,怎么结果出来不一样呢?