我有一个数组/指针作为输入参数的问题。
我想用:
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的调用相匹配。
我猜问题是它是指向数组的指针吗?
如何做到这一点?
谢谢!
答案 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]
;关键是他们都必须是一样的。