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函数里面去了。 |
|