C 注:预计为&x2018;浮动(*)[100]和#x2019;但参数的类型为‘;浮动(*)[100][100]’;

C 注:预计为&x2018;浮动(*)[100]和#x2019;但参数的类型为‘;浮动(*)[100][100]’;,c,types,floating-point,arguments,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;//

我有一个警告:

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);
有什么想法吗?

尝试改变这一点:

r1 = readfile(&A, &B);
为此:

r1 = readfile(A, B);

请注意,&已被删除。用一种非常简单的方式来说,您传递的是指向多维数组的指针,而不是多维数组。(正如您在函数声明中所声明的)

这是一个太多的间接层次

r1 = readfile(&A, &B);
试试看

r1 = readfile(A, B);

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

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

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)

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


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

,特别是第12节和第18节。它不是额外的间接级别。它只是指向同一地址但类型错误的指针(指向二维数组的指针,而不是指向二维数组第一行的指针,二维数组本身就是一维数组)。@R..-嗯,是的。我可能认为矩阵及其行是不同的级别,但这取决于它的声明方式。
readfile(A, B)