恍然大悟C++指针用途

恍然大悟的指针用途

​ 作为一个C++的新手,一直不明白指针的意义。之前代码写的最多的是Python和Java。尤其是在写Python的时候,我很多时候想在函数中改变原变量的值是没有办法的。(当然Python分成了可变和不可变对象,那又是另一个话题了...)我在学习指针的时候就一直不明白,指针复杂难以追踪,很多时候还需要创建动态内存容易造成内存泄漏,为什么指针还需要存在?后来发现书上早已给我阐明,只是我看书过于囫囵吞枣,这里作为心得体会写下来。

​ 简单来说,C++的函数有两种参数传递的方式:

  1. 值传递(Pass by Value):这种方式复制了参数实际的值传给函数。我们可以在函数内部改变其值,但是无法作用于函数外部。

    经典例子:

    void myFunc(int x){
        x = 100;
    }
    
    int main(){
        int var = 20;
        myFunc(var);
        cou << var;
        // 结果是20
    }

    这种传递是值传递,最原始的函数值没有办法被函数改变。

  2. 引用传递(Pass by Reference):引用传递复制了参数的地址给函数。在函数内部,地址可以直接获取“真实的参数”(我看的是英文版,这里引用原文便是"the address is used to access to actual argument in the call")这也就是说,通过地址改变参数,是可以直接影响到参数本身的。

    举个栗子:

    void myFunc(int* x){
        *x = 100;
    }
    
    int main(){
        int var = 20;
        myFunc(&var);
        cout << var;
        // 结果是100
    }

    可以看见,我们通过取地址符,直接传递了变量的地址,在函数的声明时说明将指针作为其参数。这样,我们就真正的影响到了变量的值。

​ 这下,我一下就弄明白了传说中指针的用途了,并且随着对C++了解的深入,虽然其复杂、灵活、多变,但是我对其功能之完全,能力之强大和程序员对他完完全全的操控无法自拔。

猜你喜欢

转载自www.cnblogs.com/scyq/p/12275924.html
今日推荐