Подпись метода в C, передача указателя на статический массив - PullRequest
2 голосов
/ 20 ноября 2011

У меня есть следующие массивы:

char* mask[9];
int hSobelMask[9] = {
    -1, -2, -1,
    0, 0, 0,
    1, 2, 1};

Я хочу дать указатель на этот массив для метода, подобного этому:

int H = applyMask(&mask, &hSobelMask);

Подпись функции applyMask - этоfolowing:

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 ]

5 голосов
/ 20 ноября 2011

Вы хотите передать указатели на эти массивы?Так что вы, вероятно, ищете это:

int applyMask(char* (*mask)[9], int (*sobelMask)[9]);
0 голосов
/ 20 ноября 2011
int applyMask(char** mask, int* sobelMask);
0 голосов
/ 20 ноября 2011

A char * ___[9] - это массив char *, а char * * ___[9] - это массив char * *. Они не совместимы. Просто измените свою подпись функции на это:

int applyMask(char** mask, int* sobelMask)

или это:

int applyMask(char* mask[], int sobelMask[])

Отредактировано для добавления (после комментария Шахбаза ниже): Вызовите свою функцию следующим образом:

int H = applyMask(mask, hSobelMask);

Эти & s не нужны, поскольку переменная массива уже является указателем на содержимое массива.

...