关于算法练习1.1中的中参数传递方式思考

来源:互联网 发布:mac l2tp服务器未响应 编辑:程序博客网 时间:2024/06/01 09:15
void addBSTreeNode(BSTreeNode *&pCurrent,int value)

这个函数参数是 BSTreeNode *&pCurrent 而不是BSTreeNode *pCurrent?

用BSTreeNode *pCurrent 会错误

C++与Java中参数传递方式及相关问题

在C++中市面上的说法是有三种传递方法:
1、值传递
2、指针传递
3、引用传递
当然说白了,指针传递本质上是值传递,传递的是地址值。而这个指针的地址值作为参数传入,是无法改变的。
但是在二叉树等方法中 需要改变指针内容时可以定义addBSTree(BSTree* &a) 利用指针传递方可改变指针内容。

在Java中实际只有一种传递方式: 值传递

基本类型就是普通的值传递。
对象类型是类似于引用传递一样,但本质上还是值传递,传递的是对象的地址。
所以在函数中修改对象本身无法修改原对象,即把新对象赋给形参,原对象不变。但是可以修改对象内部的成员变量的值。
但是在某种情形下似乎仍然无法修改,即Integer 等封装类型。这是因为Integer String等都是final修饰的不可变对象。
Integer a = new Integer(0);
a =2;
a=2时 是java的自动装箱机制即真实执行的是 a = new Integer(2) 即Integer类型的引用a指向了新的2,而原来的0没变。
故会产生 对象作形参,传递的是引用,但是原来那个值并未改变


0 0