注意:预期'float(*)[100]'但参数类型为'float(*)[100] [100]'

时间:2011-06-26 12:14:37

标签: c types floating-point arguments

我有警告:

note: expected ‘float (*)[100]’ but argument is of type ‘float (*)[100][100]’ 

我的功能如下:

int readfile (float macierz_A[MAXSIZE][MAXSIZE], float macierz_B[MAXSIZE][MAXSIZE])
...
float A[MAXSIZE][MAXSIZE];
float B[MAXSIZE][MAXSIZE];
int r1;// = 3;
r1 = readfile(&A, &B);

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

尝试改变这一点:

r1 = readfile(&A, &B);

进入这个:

r1 = readfile(A, B);

请注意&已被删除。以非常简单的方式说,您将指针传递给多维数组,而不是多维数组。 (正如您在函数声明中声明的那样)

答案 1 :(得分:3)

void f(int p[M][N]);

相当于

void f(int (*p) [N]); //pointer to array of N elements

在您的情况下,N为100,编译器期望表达式为int(*)[100]。但由于A(大概)类型为int[100][100],因此&A的类型为int(*)[100][100],这就是错误告诉您的内容。你必须通过A,而不是它的附录,即

readfile(A, B)

答案 2 :(得分:1)

这是间接的一个层次

r1 = readfile(&A, &B);

试试

r1 = readfile(A, B);

或者,如果您实际想要指向每个矩阵的指针,请将该函数更改为

int readfile (float (*macierz_A)[MAXSIZE][MAXSIZE], float (*macierz_B)[MAXSIZE][MAXSIZE])

答案 3 :(得分:1)

确定。这里的问题是你传递A和B的地址,两者都是二维数组,但是在函数“readfile”中你只接受float [100] [100]的值

这是一个警告而不是错误的原因是因为:float [] []也被编译器解释为float * [](就像int *相当于int [])。