函数内的函数参数

时间:2014-06-28 18:14:55

标签: c function pointers reference structure

我有以下代码:

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;
}

我不确切知道如何标记此问题。对我来说,最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

funcY(f1);            <---- is this correct?

是的,这条特定的线是正确的。但是,其他几个部分并不是:具体来说,通过指针访问struct成员需要->运算符,而不是点:

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

另一个小问题是不应该在C:

中投射malloc
Foo *foo1 = malloc(sizeof(struct foo));

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

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

答案 1 :(得分:0)

funcY(f1)是正确的 - 它会将Foo指针传递给funcY,并且由于funcY接受Foo指针,我们可以假设它将作为意图。

然而,

printf("%d", f1.x);不正确。 f1Foo指针,而不是Foo。要访问它的x字段,您需要先将其取消 - (*f1).x - 或使用sytactic sugar f1->x