在循环内调用函数

时间:2015-07-27 10:39:41

标签: c arrays function

我正在尝试一个简单的加法函数,它将从数组中取一个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;
}

3 个答案:

答案 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 *位于预期的位置,因此从intint *的错误和隐式转换正在讨论。
  • 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;
}