数据加载中……

基本概念:函数的传值(2)

看了Thinking c++第10章的传值方式传递和返回这一节。不是很明白。

午休的时候。写了一个例子,反编译了看看。

#include <stdio.h>
class A
{
    public:
        int i;
        int ii;
        int iii;
};

void fun1(A a){
    a.i++;
}

int main(int argc, char *argv[])
{
    printf("start...\n");
    A a;
    a.i    = 1;
    a.ii   = 2;
    a.iii  = 3;
    fun1(a);
    printf("end...\n");
    return 0;
}

 

 

mov     dword ptr ss:[ebp-C], 1       ;i
mov     dword ptr ss:[ebp-8], 2       ;ii
mov     dword ptr ss:[ebp-4], 3       ;iii
sub     esp, 0C                                 
mov     eax, esp
mov     ecx, dword ptr ss:[ebp-C]
mov     dword ptr ds:[eax], ecx        
mov     edx, dword ptr ss:[ebp-8]       
mov     dword ptr ds:[eax+4], edx       
mov     ecx, dword ptr ss:[ebp-4]       
mov     dword ptr ds:[eax+8], ecx 
call       00401000                                  ;fun1的地址

 

看了上面的汇编代码,基本都明白了。

把对象A的成员变量按着定义的顺序一个一个的COPY到栈中。

posted on 2007-08-08 13:16 冬天的林 阅读(1064) 评论(4)  编辑 收藏 引用 所属分类: C++基础

评论

# re: 基本概念:函数的传值(2)  回复  更多评论   

还是不明白。。。。。传值方式,好象不是这么理解的吧!?
2007-08-08 16:08 | 彩虹游鱼

# re: 基本概念:函数的传值(2)  回复  更多评论   

那里不明白?我也不明白。共同交流交流。
2007-08-08 16:10 | 冬天的林

# re: 基本概念:函数的传值(2)  回复  更多评论   

呵呵,偶也明白了
2007-08-08 16:27 | benlei

# re: 基本概念:函数的传值(2)  回复  更多评论   

明白就好。要是看了我的东东。结果明白的也搞不明白了。我就不好意思呢。
2007-08-08 18:42 | 冬天的林

# re: 基本概念:函数的传值(2)  回复  更多评论   

不明白楼主的理解方式:)
从C++语言层面上来理解,告诉你传值就是copy一个参数进去, 函数里对它所做的一切与原来的无关,这就清楚的不能再清楚了。 但是你不明白, 却要用反编译后看汇编代码才明白, 这和我的理解方式刚好相反, 我觉得你用汇编去验证到是可以理解。。。
2007-08-08 23:31 | SmartPtr

# re: 基本概念:函数的传值(2)  回复  更多评论   

请问大哥 Thinking C++ 第10章 引用和拷贝构造函数 10.3.1 的传值方式传递和返回 是怎么理解的?
2007-08-08 23:50 | 冬天的林

# re: 基本概念:函数的传值(2)  回复  更多评论   

呵呵原来可以这样拷贝的
-------------------------------------------------
http://www.sy555.com
2007-08-09 00:13 | 卡卡

# re: 基本概念:函数的传值(2)  回复  更多评论   

I guess that to get the <a href="http://bestfinance-blog.com/topics/personal-loans">personal loans</a> from creditors you must have a good motivation. Nevertheless, once I've got a commercial loan, just because I was willing to buy a house.
2011-09-01 16:04 | NancyTodd24

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理