分享

C语言返回值为结构体的汇编分析

 jddong 2017-04-23

http://blog.csdn.net/xiayu0912/article/details/8173418

今天心血来潮,想弄清楚C语言的返回值为结构体,那它是怎么返回这些结构体的。

写了个简单的程序

 

#include <stdio.h>

struct abc

{

     int a;

    int b;

};

 

struct abc Ret()

{

    struct abc temp;

    temp.a = 1;

    temp.b = 2;

    return temp;                 //根据反汇编的结果,在这里已经把temp的内容复制到下面main里的temp1了

}

 

int main()

{

   struct abc temp1;

   temp1 = Ret();            //表面上应该在这里复制Ret函数里的值的,其实在上面的Ret函数还没有返回的时候这一个赋值已经做完了

   printf("%d,%d\n", temp1.a, temp2.b);

}

 

temp1 = Ret(); 这一个语句里有一个玄机:

这个语句翻译成汇编之后和我们看到的C语言代码就不一样了,真实的情况是汇编之后这个语句被改变了,从反汇编之后的代码来看的话,这个语句变成了这样:

Ret(&temp1);

看见了吧,明明这个函数是没有参数的,结果temp1变量的地址作为参数传到了Ret函数里面去了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多