依睛(IT blog) 我回来了,PHP<-->C/C++ LINUX

笨鸟

统计

积分与排名

友情连接

最新评论

c语言怎么返回结构体?

c语言怎么返回结构体?
 
最近看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;
  }

posted on 2008-10-27 15:24 向左向右走 阅读(1110) 评论(0)  编辑 收藏 引用 所属分类: C/C++学习资料库

只有注册用户登录后才能发表评论。