【问题标题】:How to pass argument array pointer in function?如何在函数中传递参数数组指针?
【发布时间】:2017-10-18 06:51:54
【问题描述】:

我有这个代码:

// *** 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-&gt;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]){
        ^

我该如何解决?

【问题讨论】:

  • 请告诉我们错误。
  • 预期为 'char (*)[20]' 但参数类型为 'char *'
  • @uniopkn 这反过来会让你想到“char*,我传递了一个数组指针。或者等等……也许我没有……”

标签: c function pointers parameter-passing


【解决方案1】:
expected 'char (*)[20]' but argument is of type 'char *

改变你调用函数的方式:

function(temp->f);

还有:

【讨论】:

  • 该声明与原始声明有何不同?
  • @Lundin 你说得对,我开始写别的东西但改变了主意。
  • 对不起,我不知道我们不应该做我在编辑中所做的事情。生活和学习:)
【解决方案2】:

当您将数组“f”作为参数传递时,您传递的是它的第一项 ADDRESS(因为数组是指针) 但是当您将 f[20] 作为参数传递时,您传递的是第 20 个元素的 VALUE f

因此,如果您传递 (f)(或在您的情况下为 temp->f),您将传递一个地址,并且目标应为“char*”类型来接收。

如果你传递 f[20](或 temp->f[20]),你传递的是一个值,并且目标应该是“char”类型

如果要接收第20项的地址,应该通过&(f[20])(或者&(temp->f[20]))

澄清一下:“f”等价于“&(f[0])”,因为两者都代表第一项的地址

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2012-05-03
    • 2021-04-08
    • 2020-02-07
    相关资源
    最近更新 更多