我有以下代码:
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;
}
我不确切知道如何标记此问题。对我来说,最好的方法是什么?
答案 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);
不正确。 f1
是Foo
指针,而不是Foo
。要访问它的x
字段,您需要先将其取消 - (*f1).x
- 或使用sytactic sugar f1->x
。