примечание: ожидается «float (*) [100]», но аргумент имеет тип «float (*) [100] [100]» - PullRequest
2 голосов
/ 26 июня 2011

У меня предупреждение:

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 ]

3 голосов
/ 26 июня 2011
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)
3 голосов
/ 26 июня 2011

Попробуйте изменить это:

r1 = readfile(&A, &B);

В это:

r1 = readfile(A, B);

Обратите внимание, что & был удален. Говоря очень простым способом, вы передаете указатель на многомерный массив вместо многомерного массива. (как вы объявили в объявлении функции)

1 голос
/ 26 июня 2011

Хорошо. Проблема здесь в том, что вы передаете адрес для A и B, оба из которых являются двухмерными массивами, но в функции «readfile» вы принимаете только значения с плавающей точкой [100] [100].

Причина, по которой это предупреждение, а не ошибка, заключается в том, что: float [] [] также интерпретируется компилятором как float * [] (точно так же, как int * эквивалентно int []).

1 голос
/ 26 июня 2011

Это один уровень косвенности слишком много

r1 = readfile(&A, &B);

Просто попробуйте

r1 = readfile(A, B);

Или, если вы на самом деле хотите указатель на каждую матрицу, измените функцию на

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