鱼C论坛

 找回密码
 立即注册
查看: 1915|回复: 11

[已解决]stdarg代码全部照搬,怎么结果出来不一样呢?

[复制链接]
发表于 2018-5-29 00:00:07 | 显示全部楼层 |阅读模式

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

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

x
#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++
最佳答案
2018-5-29 10:04:13
改成result = sum(3,3,4,5);   result = sum(3,1,1,1);试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-29 10:04:13 | 显示全部楼层    本楼为最佳答案   
改成result = sum(3,3,4,5);   result = sum(3,1,1,1);试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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. 难道是编译器问题?我代码都是照搬小甲鱼视频的啊,不会错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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是如何知道有多少个参数的?

1.png

为什么没有输出变量d
为什么 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-30 09:00:06 | 显示全部楼层
int sum(int n, ...) 按照你的代码n是参数个数,printf是根据格式化字符串中的%多少确定参数个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 13:26:38 | 显示全部楼层
人造人 发表于 2018-5-29 22:14
int sum(int n, ...);
这个 int n 是做什么用的?
为什么不直接写 int sum(...);

你这个只是打出数字啊,小甲鱼视频里是利用stdarg打出运算结果。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 13:31:50 | 显示全部楼层
本帖最后由 peterz6175 于 2018-5-30 21:09 编辑

QQ图片20180530132305.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

int sum(int n, ...);

你告诉我,这个 int n 是做什么用的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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个参数的和。。

这是小甲鱼视频里的原话,我拷贝过来的。初学者好多东西都不懂,但是我是完全按照教学视频操作的,不明白为什么不可以正常运行。我怀疑是不是编译器的不同导致的。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 20:06:06 | 显示全部楼层
人造人 发表于 2018-5-30 15:41
int sum(int n, ...);

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

不纠结了。代码我理解错了,好低级的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-30 20:07:31 | 显示全部楼层
人造人 发表于 2018-5-30 15:41
int sum(int n, ...);

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

第一个参数n是代表后面有多少个参数而已啊,从第二个开始才是求和,我这理解能力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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这个参数的作用没理解对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-29 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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