c++调java 传参_浅析C++函数参数与Java传递比较

对于C++函数参数与Java传递比较的问题,相信这是许多技术人员和一些开发人员的头疼的一块心病,看完本篇文章您就会了解什么是Java值传递,什么是C++函数参数值传递。

先说Java,先做几点说明:

在Java中,无非就是两种类型,即基本类型和从Object继承下来的对象类型,而对象类型又包括String这种一旦初始化就不可改变内容的类型和BufferString这种可以初始化后可以改变内容的类型。然后看一下代码示例:public class Test {

public static void main(String args[]) {

Integer interger1, interger2;

int i, j;

interger1=newInteger(10);

interger2=newInteger(50);

i=5;

j=9;

System.out.println("Before Swap, Interger1 is " + interger1);

System.out.println("Before Swap, Interger2 is " + interger2);

swap(interger1, interger2);

System.out.println("After Swap Interger1 is " + interger1);

System.out.println("After Swap Interger2 is " + interger2);

System.out.println("Before Swap i is " + i);

System.out.println("Before Swap j is " + j);

swap(i, j);

System.out.println("After Swap i is " + i);

System.out.println("After Swap j is " + j);

StringBuffersb=newStringBuffer("I am StringBuffer");

System.out.println("Before change, sb is");

change(sb);

System.out.println("After change sb is");

}

public static void swap(Integer ia, Integer ib) {

Integertemp=ia;

ia=ib;

ib=temp;

}

这很好解释,对于基本类型诸如int,传递进去的是存放int值的“内存单元”的一个copy,所以函数swap里面的int和外面的int根本就不是一个东西,当然不能反射出去影响外面

的int。而对于对象类型,我们同样可以这样认为,C++函数参数传递进去的是存放对象类型的指针的“内存单元”一个copy(虽然Java里面没有指针的概念,但这并不妨碍我们理解)。这样,在swap函数里面,对其指针本身的值做任何操作当然不会影响外面的Integer,因为interger1和interger2的“内存单元”里面的值是不变的,其指向的对象类型也是没有变的。

然后这里需要说明一个问题,就是StringBuffer这种类型的对象了。因为其内容是可以改变的,所以change函数里面的“指针”通过类似“*”的操作,改变了StringBuffer对象的本身,就显而易见了。(StringBuffer对象本身只有一个副本)然后说C++了,里面的基本类型的诸如int的值传递大家都了然于胸,就不在这里废话了。

然后另一种值传递可以称为指针引用传递(pass-by-value argument of pointer)(这个类似上文说的Java中的对象类型的值传递),可以通过*操作,改变指针指向的值。示例程序如下,一看便知:#include

int main(){

void test(int*, const char*);

inti=1;

int*iptr= &i;

cout<

cout<

cout<

cout<

cout<

cout<

test(iptr, "pass-by-iptr");

test(&i, "pass-by-&i");

return 0;

}

这里的引用(reference)说的明白一些,就是C++函数参数被传递参数的一个别名,或者更直接的理解就是被传递参数自己了,只是名字不同而已。那么既然自己都被pass过去了,那当然可以在function里面为所欲为了。

【编辑推荐】

【编辑推荐】

【责任编辑:苏越 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值