在C中,从函数返回结构的机制是什么
请解释一下,函数返回的结构变量是如何实现的。基本上,当从函数返回单个变量时,该值将被放入寄存器并返回。但在结构返回的情况下,这将如何工作。我假设结构将被复制到某个全局位置并返回指针。这将由编译器管理。我的理解正确吗 这就是我的示例程序在C中,从函数返回结构的机制是什么,c,structure,C,Structure,请解释一下,函数返回的结构变量是如何实现的。基本上,当从函数返回单个变量时,该值将被放入寄存器并返回。但在结构返回的情况下,这将如何工作。我假设结构将被复制到某个全局位置并返回指针。这将由编译器管理。我的理解正确吗 这就是我的示例程序 #include <stdio.h> #include <stdlib.h> typedef struct ss { char name[10]; int val; } HELLO; HELLO *ptr=NULL; HEL
#include <stdio.h>
#include <stdlib.h>
typedef struct ss
{
char name[10];
int val;
} HELLO;
HELLO *ptr=NULL;
HELLO myfun()
{
HELLO hel = {"Salil", 20};
ptr = &hel;
return hel;
}
main()
{
HELLO hel1;
hel1 = myfun();
if ( ptr ) printf("The val = %s \n", ptr->name);
}
#包括
#包括
类型定义结构ss
{
字符名[10];
int-val;
}你好,;
HELLO*ptr=NULL;
你好,我的朋友
{
你好,Hell={“Salil”,20};
ptr=&hel;
返回hel;
}
main()
{
你好,hel1;
hel1=myfun();
if(ptr)printf(“val=%s\n”,ptr->name);
}
在
myfun
中,如何返回hel
变量?返回时变量将保存在哪里?如果我们讨论的是C
,则不能仅返回指向它的指针。假设您通过malloc
/calloc
为struct
分配了空间,那么将返回指针。很难判断它是在寄存器中返回还是在堆栈中返回,这取决于优化级别。它取决于编译器和目标的ABI。我看到的一些:
- 多寄存器:在某些ABI中,可以在多个寄存器中返回小结构
- 全局缓冲区:可以在调用者和被调用者都知道的地方分配缓冲区
- 在堆栈上,调用方的帧:调用方可以在堆栈上分配额外的空间,并将该空间的地址作为隐藏的额外参数传递给函数
- 堆栈上替换参数:在被调用方从堆栈中弹出参数的ABI中,它可以用返回值替换这些参数