为什么在调用此函数时添加括号会破坏我的程序?

时间:2015-09-10 20:04:14

标签: c

我的目的是制作一个简单的程序,输出数组中两个连续元素之间的最大差异,我的问题是,为什么在添加" []"在标记的行中打破程序(如果我将它们取出它就可以正常工作)。

#include <stdio.h>
#include <math.h>
#define EPSILON 0.000001
#define DIM     5

double maxDif(double vector[]);

int
main(){
    double vec[DIM]={3,5,7,23,0};
    double result;
    result=maxDif(vec[]);  /* <-- problem here */
    printf("The largest diff between 2 consecutive elements is: %g \n", result);
    return 0;
}

double
maxDif(double vector[]){
    double retVal=0;
    int i=0;
    if(fabs(vector[0]>EPSILON))
        while(fabs(vector[i++]>EPSILON))
            if((vector[i]-vector[i-1]>retVal))
                retVal=vector[i]-vector[i-1];
    return retVal;
}

2 个答案:

答案 0 :(得分:2)

执行maxDif(vec)时,将数组(或更具体地说,指向数组的第一个元素的指针)传递给函数maxDif。此函数的定义与此调用匹配。

调用类似maxDif(vec[])的函数是无效的语法。一对空括号仅在声明数组时有效(如果它不是函数参数,或者如果它是struct中的最后一个字段,则初始化它),而不是在访问它时。

答案 1 :(得分:1)

这不是您需要发送vec作为参数的方式。像这样发送:**result=maxDif(vec);

说明:vec是一个数组,当您将其作为参数传递时,您将传递它的地址。编译器已经知道它是一个数组,所以不需要[],而且 - 它们是无效的语法,如你所知