标题几乎总结了这一点.为什么我可以将本地创建的Point a(在函数ReadPoint()中)分配到一个不同范围的变量中.本地创建的Point a是否与函数readPoint()堆栈一起"弹出"?到底发生了什么?
struct Point readPoint(void)
{
struct Point a;
printf("x = ");
scanf("%lf",&b.x);
printf("y = ");
scanf("%lf",&b.y);
return a;
}
int main(int argc, char **argv) {
Point test = readPoint();
printPoint(test);
return 0
}
Run Code Online (Sandbox Code Playgroud)
struct在这方面,s与原始类型没有什么不同.它的原理完全相同:
int foo(void)
{
int x = 5;
return x;
}
int main(void)
{
int y = foo();
printf("%d\n", y);
}
Run Code Online (Sandbox Code Playgroud)
如何实现这一点的细节取决于实现.但通常,返回值(无论是a int还是a struct)由被调用函数放置到堆栈上,然后调用者可以访问该堆栈位置.