2011-11-20 55 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