我的目的是制作一个简单的程序,输出数组中两个连续元素之间的最大差异,我的问题是,为什么在添加" []"在标记的行中打破程序(如果我将它们取出它就可以正常工作)。
#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;
}
答案 0 :(得分:2)
执行maxDif(vec)
时,将数组(或更具体地说,指向数组的第一个元素的指针)传递给函数maxDif
。此函数的定义与此调用匹配。
调用类似maxDif(vec[])
的函数是无效的语法。一对空括号仅在声明数组时有效(如果它不是函数参数,或者如果它是struct
中的最后一个字段,则初始化它),而不是在访问它时。
答案 1 :(得分:1)
这不是您需要发送vec
作为参数的方式。像这样发送:**result=maxDif(vec);
说明:vec
是一个数组,当您将其作为参数传递时,您将传递它的地址。编译器已经知道它是一个数组,所以不需要[]
,而且 - 它们是无效的语法,如你所知