如何在函数中传递参数数组指针?

时间:2017-05-18 12:40:50

标签: c function pointers parameter-passing

我有这段代码:

// *** foo.c ***

#include <stdlib.h> // malloc

typedef struct Node {
    char (*f)[20];
    //...
} Node;

int function(char f[30][20]){
    // Do some stuff with f...
}

int main(){
    Node * temp = (Node*)malloc(sizeof(Node));
    function(temp->f[20]);
}

我想将temp->f数组指针传递给函数,但是在编译时我遇到了这些错误:

$ gcc foo.c -o foo
foo.c: In function ‘main’:
foo.c:16:5: warning: passing argument 1 of ‘function’ from incompatible pointer type [enabled by default]
     function(temp->f[20]);
     ^
foo.c:10:5: note: expected ‘char (*)[20]’ but argument is of type ‘char *’
    int function(char f[30][20]){
        ^

我该如何解决?

2 个答案:

答案 0 :(得分:4)

expected 'char (*)[20]' but argument is of type 'char *

将您调用该函数的方式更改为:

function(temp->f);

此外:

答案 1 :(得分:1)

当你传递数组&#34; f&#34;作为参数,你传递它的第一个项目ADDRESS(因为数组是指针) 但是当你传递f [20]作为参数时,你传递的是第20个元素的VALUE f

所以,如果你传递(f)(或在你的情况下是temp-> f),你传递的是一个地址,目的地应该是&#34; char *&#34;要接收的类型。

如果你传递f [20](或temp-> f [20]),你传递一个值,目的地应该是&#34; char&#34;型

如果你想收到第20项的地址,你应该通过&amp;(f [20])(或&amp;(temp-&gt; f [20]))

只是为了澄清:&#34; f&#34;相当于&#34;&amp;(f [0])&#34;,因为两者都代表第一项的地址