您的位置:首页 > 编程语言 > C语言/C++

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

2012-11-12 11:27 489 查看
今天心血来潮,想弄清楚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函数里面去了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: