传递数组/指针作为输入参数

时间:2014-04-13 20:38:27

标签: c arrays pointers

我有一个数组/指针作为输入参数的问题。

我想用:

int A(int ncontours, int cntr[], double* vertices[], int *triangles [3])
{
...
B(n, nmonpoly, triangles);
...
}

A在h文件中定义为:

extern int A(int, int *, double (*)[2], int (*)[3]);

B定义为

extern int B(int, int, int (*)[3])

错误消息是:

  

错误1错误C2664:' B' :无法从' int []'转换参数3   到' int()[3]'

我想纠正A的输入参数,使它们与B的调用相匹配。

我猜问题是它是指向数组的指针吗?

如何做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

int (*)[3]

表示:给我一个指向3个整数数组的指针

int *triangles [3]

表示:我收到一个包含整数3个指针的数组。

这是两件完全不同的事情。这些表达式中符号的优先级很重要,这就是()括号的原因。

似乎A的定义是错误的,由于我在上面发布的差异,它是一个完全不同的功能。如果您修复A的定义,您可能会将三角形参数传递给B而不会出现问题,因为它们的类型将匹配

答案 1 :(得分:0)

A应该是:

int A(int ncontours, int cntr[], double* vertices[], int (*triangles) [3])

您应该收到编译错误,A的定义和声明不匹配。

另外,您能否显示调用A的代码?另一种选择是让A和B都取int *[3]而不是int (*)[3];关键是他们都必须是一样的。