我正在尝试一个简单的加法函数,它将从数组中取一个x
并向其中添加一个变量i
,这是for循环中的迭代变量。而不是单独添加每个变量并产生输出:
3,2,7
它产生
的值3,5,13。
#include <stdio.h>
int add(int x[], int y);
int main(void) {
int i;
int a[3] = {3, 1, 5};
for(i=0; i<3; i++)
{
printf("%d \t", i);
printf("%d, %d, equals %d \n", a[i], i, add(a[i], i));
}
return 0;
}
int add(int x[], int y){
return x+y;
}
答案 0 :(得分:6)
尝试
int add(int x, int y){
return x+y;
}
答案 1 :(得分:2)
在您的函数定义中,
int add(int x[], int y){
int x[]
期望将数组作为参数传递。通过
add(a[i], i)
你犯了多个错误,比如
int
值,其中int *
位于预期的位置,因此从int
到int *
的错误和隐式转换正在讨论。add()
内,x
的类型为int *
。因此,通过说return x+y;
,您基本上(错误地)将指针转换为int
类型。在这里,您似乎只需要一个int
变量。不是一个数组。将其(声明和定义)更改为
int add(int x, int y){
建议:调高编译器警告并注意它们。例如,启用-Wall
选项后,您会收到一条警告
警告:传递'add'的参数1使得整数指针没有强制转换
printf("%d, %d, equals %d \n", a[i], i, add(a[i], i)); ^
和
预期
int *
但参数类型为int
int add(int x[], int y);
和
警告:返回从指针生成整数而没有强制转换
return x+y; ^
答案 2 :(得分:1)
您正在使用数组作为参数。请尝试以下代码:
#include <stdio.h>
int add(int x, int y);
int main(void) {
int i;
int a[3] = {3, 1, 5};
for(i=0; i<3; i++)
{
printf("%d \t", i);
printf("%d, %d, equals %d \n", a[i], i, add(a[i], i));
}
return 0;
}
int add(int x, int y){
return x+y;
}