【问题标题】:Function arguments within a function函数内的函数参数
【发布时间】:2014-06-28 18:14:54
【问题描述】:

我有以下代码:

include <stdlib.h>

typedef struct foo{
    int x;
}Foo;

void funcY(Foo *f1)
{
    printf("%d", f1.x);
}

void funcX(Foo *f1)
{
    printf("%d", f1.x);
    funcY(f1);            <---- is this correct?
}

int main()
{
    Foo *foo1 = (struct foo *)malloc(sizeof(struct foo));
    foo1.x = 10;
    funcX(foo1); 
    return 0;
}

我不知道如何准确地标记这个问题。解决这个问题的最佳方法是什么?

【问题讨论】:

  • 预期的行为是什么?它是否按预期工作?当您尝试编译和运行它时会发生什么,这与您想要的有什么不同?

标签: c function pointers reference structure


【解决方案1】:
funcY(f1);            <---- is this correct?

是的,这一行是正确的。然而,其他几个不是的部分:具体来说,通过指针访问struct 成员需要-&gt; 运算符,而不是点:

printf("%d", f1->x);

另一个小问题是不应该在 C 中转换 malloc

Foo *foo1 = malloc(sizeof(struct foo));

最后,您错过了调用free(foo) 以释放malloc-ed 内存。请注意,您不必使用malloc - 在自动存储中分配struct,并使用&amp; 访问其地址:

int main()
{
    Foo foo1;
    foo1.x = 10;
    funcX(&foo1); 
    return 0;
}

【讨论】:

  • 谢谢!我很着急,没有发现我的错误。
【解决方案2】:

funcY(f1) 是正确的——它将Foo 指针传递给funcY,并且由于funcY 接受Foo 指针,我们可以假设它会按预期工作。

printf("%d", f1.x); 但是,不正确。 f1Foo 指针,而不是 Foo。要访问它的 x 字段,您需要先取消引用它 - (*f1).x - 或使用语法糖 f1-&gt;x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2013-06-23
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多