Подпись метода в C, передача указателя на статический массив
У меня есть следующие массивы:
char* mask[9];
int hSobelMask[9] = {
-1, -2, -1,
0, 0, 0,
1, 2, 1};
Я хочу дать указатель на этот массив для метода, подобного этому:
int H = applyMask(&mask, &hSobelMask);
Сигнатура функции applyMask выглядит следующим образом:
int applyMask(char** mask[9], int* sobelMask[9]);
Но я получаю следующее предупреждение компиляции:
demo.c: In function ‘customSobel’:
demo.c:232:7: warning: passing argument 1 of ‘applyMask’ from incompatible pointer type
demo.c:181:5: note: expected ‘char ***’ but argument is of type ‘char * (*)[9]’
demo.c:232:7: warning: passing argument 2 of ‘applyMask’ from incompatible pointer type
demo.c:181:5: note: expected ‘int **’ but argument is of type ‘int (*)[9]’
Что означает это предупреждение, как мне от него избавиться?
3 ответа
Решение
Вы хотите передать указатели на эти массивы? Итак, вы, вероятно, ищете это:
int applyMask(char* (*mask)[9], int (*sobelMask)[9]);
char * ___[9]
это массив char *
и char * * ___[9]
это массив char * *
, Они не совместимы. Просто измените свою подпись функции на это:
int applyMask(char** mask, int* sobelMask)
или это:
int applyMask(char* mask[], int sobelMask[])
Отредактировано, чтобы добавить (после комментария Шахбаз ниже): Вызовите свою функцию следующим образом:
int H = applyMask(mask, hSobelMask);
Там нет необходимости для тех, &
s, поскольку переменная массива уже является указателем на содержимое массива.