恍然大悟的指针用途
作为一个C++的新手,一直不明白指针的意义。之前代码写的最多的是Python和Java。尤其是在写Python的时候,我很多时候想在函数中改变原变量的值是没有办法的。(当然Python分成了可变和不可变对象,那又是另一个话题了...)我在学习指针的时候就一直不明白,指针复杂难以追踪,很多时候还需要创建动态内存容易造成内存泄漏,为什么指针还需要存在?后来发现书上早已给我阐明,只是我看书过于囫囵吞枣,这里作为心得体会写下来。
简单来说,C++的函数有两种参数传递的方式:
值传递(Pass by Value):这种方式复制了参数实际的值传给函数。我们可以在函数内部改变其值,但是无法作用于函数外部。
经典例子:
void myFunc(int x){ x = 100; } int main(){ int var = 20; myFunc(var); cou << var; // 结果是20 }
这种传递是值传递,最原始的函数值没有办法被函数改变。
引用传递(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++了解的深入,虽然其复杂、灵活、多变,但是我对其功能之完全,能力之强大和程序员对他完完全全的操控无法自拔。