代码纠错
照着小甲鱼的视频敲的,自己也找了好多遍,没发现错误。看弹幕好像也有一部分人碰到了这种情况,希望知道为什么,并如何改进
发文本代码 sum 函数的第一个参数 n,指定后面有几个参数
result = sum(5, 1, 2, 3, 4, 5);
还有,提问题要贴文本形式的代码,图片可以贴,但是文本形式的代码一定要贴
人造人 发表于 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;
}
我用了指针
#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;
}
jhq999 发表于 2021-9-12 14:38
我用了指针
首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候,能够简单讲解这两行代码呢?int *i=&n+1以及sum+= i; 本帖最后由 jhq999 于 2021-9-13 12:08 编辑
元武 发表于 2021-9-13 07:02
首先非常感谢你的新方法,让我明白还有这种简洁的解法。但请原谅我的知识储备有限,如果在你方便的时候, ...
前面人造人大神告诉你了参数n必须是后面参数的个数,你知道什么原因了吧?其实n后面参数就在参数n的后面,既然知道参数n的位置,再加上知道后面参数的个数当然就知道后面参数的值。
int *i=&n+1
i就是后面第一个参数指针
sum+= i;
这里是用了数组和指针的转换关系;
你应该在动态数组时就学到了吧。
建议:学完c,学汇编,你再回来看C你会豁然开朗的
jhq999 发表于 2021-9-13 11:55
前面人造人大神告诉你了参数n必须是后面参数的个数,你知道什么原因了吧?其实n后面参数就在参数n的后 ...
是这样的,
首先“参数n必须是后面参数的个数”这个事实由人造人大神提点后明白了,但为什么是这样还不太清楚。
特别后面小甲鱼的作业中,似乎第一个参数也可以是指针,我查了下csdn发现“va_start宏,获取可变参数列表的第一个参数的地址”,好像和“”n必须是后面参数的个数”有些出入。
不过关于我向你提问的两行代码经过你的讲解已经明白了,非常感谢你。
关于学完c后学汇编的额外建议我也非常感谢,会去了解相关内容的。
页:
[1]