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

今天心血来潮,想弄清楚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函数里面去了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值