3 回答
TA贡献1780条经验 获得超4个赞
您可以从函数返回结构(或使用=运算符),而不会出现任何问题。这是语言中定义明确的部分。唯一的问题struct b = a是您没有提供完整的类型。 struct MyObj b = a会很好。您也可以将结构传递给函数-为了传递参数,返回值和分配,结构与任何内置类型完全相同。
这是一个简单的演示程序,可完成所有这三个操作-将结构作为参数传递,从函数返回结构,并在赋值语句中使用结构:
#include <stdio.h>
struct a {
int i;
};
struct a f(struct a x)
{
struct a r = x;
return r;
}
int main(void)
{
struct a x = { 12 };
struct a y = f(x);
printf("%d\n", y.i);
return 0;
}
下一个示例几乎完全相同,但是使用内置int类型进行演示。对于参数传递,赋值等的值传递,这两个程序具有相同的行为:
#include <stdio.h>
int f(int x)
{
int r = x;
return r;
}
int main(void)
{
int x = 12;
int y = f(x);
printf("%d\n", y);
return 0;
}
TA贡献1848条经验 获得超6个赞
进行诸如之类的调用时a = foo();,编译器可能会将结果结构的地址压入堆栈,并将其作为“隐藏”指针传递给foo()函数。实际上,它可能变为:
void foo(MyObj *r) {
struct MyObj a;
// ...
*r = a;
}
foo(&a);
但是,此操作的确切实现取决于编译器和/或平台。正如Carl Norum所指出的,如果结构足够小,它甚至可能会完全传回寄存器中。
- 3 回答
- 0 关注
- 728 浏览
添加回答
举报