您的位置:控制工程论坛网论坛 » 自动化软件 » c语言怎么返回结构体?

zhiy66

zhiy66   |   当前状态:在线

总积分:6528  2024年可用积分:0

注册时间: 2007-12-18

最后登录时间: 2012-01-11

空间 发短消息加为好友

c语言怎么返回结构体?

zhiy66  发表于 2009/3/22 21:06:05      2009 查看 2 回复  [上一主题]  [下一主题]

手机阅读

最近看Computer Systems: A Programmer's Perspective,大致了解了c语言函数调用返回的堆栈变化. 比如函数返回int,实际上是把返回值存在一个特定的寄存器上(eax?),而返回一个float,是把返回值放在第一个浮点寄存器上%st(0)

请问,如果是返回结构体,那结构体放在哪里?我设想可以由callee把它放在堆中,在eax放置指向它的指针,然后由caller销毁.但是这样做很笨重.

代码如下,该代码可以通过gcc的编译,即使我指定了 -std=c89:

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>

  typedefstruct St{
    int id;
  }St;

  St* returnPointer(void)
  {
    St* p=calloc(1,sizeof(St));
    p->id=100;
    return p;
  }
   
  St returnStruct(void)
  {
    St st;
    st.id=100;
    return st;
  }

  int main()
  {
    St st1=*(returnPointer());
    St st2=returnStruct();
    printf("%d\n", st1.id);
    printf("%d\n", st2.id);

    return 0;
  }
1楼 0 0 回复
总共 , 当前 /