美文网首页
函数传参

函数传参

作者: tom__zhu | 来源:发表于2020-09-24 22:59 被阅读0次

    首先要理解,参数传递是会复制的

    main() {
    foo();
    }
    
    void foo(void) {
    int num = 1;
    _foo(num);
    print("foo num is " + num);
    }
    
    void _foo (int num) {
    print("_foo num is " + num);
    num = 2;
    }
    
    \> _foo num is 1
    \> foo num is 1
    

    在调用 _foo 时,另外开辟了内存空间将 num 内容复制拷贝了一份进去,所以 _foo 方法对参数做修改,原始参数不会发生改变。
    但是如果想要对方法传入的对象进行修改要怎么做呢?

    void foo(void) {
    int num = 1;
    _foo(&num);
    print("first num is " + num);
    }
    
    void _foo (int *num) {
    print("second num is " + *num);
    *num = 2;
    }
    
    \> _foo num is 1
    \> foo num is 2
    

    入参改为指针,仍然会开辟一份新空间保存传入的指针,但是对指针修改仍然会影响相同的变量内容。
    另外如果传递的是结构体而且这个结构体比较大,传递结构体指针会减小拷贝的性能消耗。

    总结:
    1、需要修改传入方法参数的原始内容,需要传指针;
    2、避免较大体积结构体对性能消耗,需要传指针

    相关文章

      网友评论

          本文标题:函数传参

          本文链接:https://www.haomeiwen.com/subject/ylfxuktx.html