2011-11-20 56 views
2

我有以下的數組:方法簽名,傳遞指針的靜態陣列上

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]’ 

這個警告是什麼意思,我該如何擺脫它?

回答

5

你想傳遞指針到這些數組?所以你可能正在尋找:

int applyMask(char* (*mask)[9], int (*sobelMask)[9]); 
+0

與我們其他人不同的是,它的確是用於回答實際問題的指針順序 –

+1

+1。 (我認爲這個問題被誤導了,但實際上回答它仍然很好!) – ruakh

+0

不錯!我真的好奇這是如何可能的,個人而言,我會用typedefs做到這一點,所以我不必處理這種語法。雖然現在我想到了,但它開始有意義 – Shahbaz

0

A char * ___[9]char *的陣列,並且char * * ___[9]char * *的陣列。它們不兼容。只要改變你的函數簽名這樣的:

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

或本:

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

編輯補充(以下沙赫巴茲的評論後):打電話給你的功能是這樣的:

​​

不需要那些&,因爲數組變量已經是指向數組內容的指針了。

+1

他想發送一個指向數組的指針,而不是數組本身。 – Shahbaz

+0

@Shahbaz:這沒有道理。一個數組基本上*是一個指針 - 一個常量 - 因此得到一個指針*它並不真正起任何作用。 – ruakh

+0

如果我使用你的第一個命題,我有以下錯誤:'expected'char **'但參數的類型是'char *(*)[9]' –

0
int applyMask(char** mask, int* sobelMask); 
+0

他想發送一個指向數組的指針,而不是數組本身 – Shahbaz

+0

沒有意義,因爲數組不是(可修改的)左值。 (這就是爲什麼指向數組的指針會衰減到指向其第一個成員的原因) – wildplasser

+0

有意義或不合理,您不回答這個問題! – Shahbaz