鱼C论坛

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

[已解决]代码纠错

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

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

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

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

还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴
屏幕截图 2021-09-12 110647.png
屏幕截图 2021-09-12 110612.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

发文本代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[n];
        }
        
        

        return sum;
}

int main()
{
        int result;

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

        printf("%d",result);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

发表于 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[n];
这里是用了数组和指针的转换关系;
你应该在动态数组时就学到了吧。
建议:学完c,学汇编,你再回来看C你会豁然开朗的

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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