【问题标题】:Method signature in C, passing pointer on static arrayC中的方法签名,在静态数组上传递指针
【发布时间】:2011-11-20 16:18:45
【问题描述】:

我有以下数组:

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

这个警告是什么意思,我该如何摆脱它?

【问题讨论】:

    标签: c pointers method-signature


    【解决方案1】:

    您想将指针传递给这些数组吗?所以你可能正在寻找这个:

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

    【讨论】:

    • +1 用于回答实际问题,这与我们其他人不同。 (我认为这个问题被误导了,但实际回答它仍然很好!)
    • 不错!我实际上很好奇这是怎么可能的,就个人而言,我会使用 typedefs 来完成,所以我不必处理这种语法。虽然现在我想起来了,但它开始变得有意义了
    【解决方案2】:
    int applyMask(char** mask, int* sobelMask);
    

    【讨论】:

    • 他想发送一个指向数组的指针,而不是数组本身
    • 没有意义,因为数组不是(可修改的)左值。 (这就是指向数组的指针衰减为指向其第一个成员的指针的原因)
    • 有没有道理,你没有回答这个问题!
    • 是的,我是。这应该可以完美地工作。通常,OP 必须向函数添加第三个参数以传递数组大小。
    【解决方案3】:

    char * ___[9]char * 的数组,char * * ___[9]char * * 的数组。它们不兼容。只需将您的函数签名更改为:

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

    或者这个:

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

    编辑添加(在下面 Shahbaz 的评论之后):像这样调用你的函数:

    int H = applyMask(mask, hSobelMask);
    

    不需要那些&s,因为数组变量已经是指向数组内容的指针。

    【讨论】:

    • 他想发送一个指向数组的指针,而不是数组本身。
    • @Shahbaz:这没有意义。数组基本上一个指针——一个常量——所以得到一个的指针实际上并没有任何用处。
    • 如果我使用你的第一个命题,我有以下错误:expected ‘char **’ but argument is of type ‘char * (*)[9]
    • @pinouchon:好时机;我刚刚所做的编辑解释了如何解决这个问题。 :-)
    • @ruakh 像这样发送数组会强制程序进行复制吗? applyMask(mask, sobelMask);我是这么认为的,这也是我在数组上发送指针的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2017-07-03
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多