函数采用长度为8的数组作为参数

时间:2013-01-02 14:22:26

标签: c arrays function args

我不明白我的错误信息

triangle_test.c: In function ‘defineLines’:
triangle_test.c:89:1: error: argument ‘args’ doesn’t match prototype
triangle_test.c:25:5: error: prototype declaration

我不知道我是否应该通过& TriHolder,8?我以前从未在C中使用数组,需要一点帮助。

int defineLines(float TriHolder[], int args);

int main(int argc, char* argv[])
{
  initialize_TriHolder(1,1,2,2,3,3,4,4);
  getInputTriVerts();
  getInputInteriorPoint();
  defineLines(&TriHolder[0],8); //this is the array I want to pass
}  

defineLines(args, length)
{
  lineAB[0]=TriHolder[0]; //Ax
  lineAB[1]=TriHolder[1]; //Ay
  lineAB[2]=TriHolder[2]; //Bx
  lineAB[3]=TriHolder[3]; //By
  slopeAB = (lineAB[3]-lineAB[1])/(lineAB[2]/lineAB[0]);
  interceptAB = slopeAB * -lineAB[0] + lineAB[1]; //b: y - y1 = m( x - x1 ), x = 0
  ///////////////////////////
  lineBC[0]=TriHolder[2];//Bx
  lineBC[1]=TriHolder[3];//By
  lineBC[2]=TriHolder[4];//Cx
  lineBC[3]=TriHolder[5];//Cy

3 个答案:

答案 0 :(得分:3)

不要将pre-ANSI表单用于函数参数。以下应编译:

int defineLines(float TriHolder[], int args);

int main(void)
{
  /* ... */
}

int defineLines(float triHolder[], int args)
{
  /* .. */
}

答案 1 :(得分:3)

您的功能标题:

defineLines(args, length){

需要匹配您的原型:

int defineLines(float TriHolder[], int args);

注意缺少关键字(float,int等)。所以更像是:

int defineLines(float args[], int length){

您正在寻找什么。您错过了TriHolderlineAB的定义,但是从您的代码中可能推断它们是一些全局浮点数。 (请确认)。

此外,您可以将数组传递为:

fineLines(TriHolder,8);}  //this is the array I want to pass

但是,如果我之前的假设是正确的并且TriHolder是全局的,为什么还要费心去传?

答案 2 :(得分:1)

defineLines的原型是正确的,但是你需要这样称呼它:

defineLines(TriHolder,8);

名称TriHolder本身实际上是指向第0个数组索引的指针,它相当于TriHolder[0]