浅析C++函数参数与Java传递比较

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

创新互联成立与2013年,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元矿区做网站,已为上家服务,为矿区各地企业和个人服务,联系电话:18980820575

先说Java,先做几点说明:

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

 
 
 
  1. public class Test {  
  2.  public static void main(String args[]) {  
  3.   Integer interger1, interger2;  
  4.   int i, j;  
  5.   interger1 = new Integer(10);  
  6.   interger2 = new Integer(50);  
  7.   i = 5;  
  8.   j = 9;  
  9.   System.out.println("Before Swap, Interger1 is " + interger1);  
  10.   System.out.println("Before Swap, Interger2 is " + interger2);  
  11.   swap(interger1, interger2);  
  12.   System.out.println("After Swap Interger1 is " + interger1);  
  13.   System.out.println("After Swap Interger2 is " + interger2);  
  14.   System.out.println("Before Swap i is " + i);  
  15.   System.out.println("Before Swap j is " + j);  
  16.   swap(i, j);  
  17.   System.out.println("After Swap i is " + i);  
  18.   System.out.println("After Swap j is " + j);  
  19.  
  20.   StringBuffer sb = new StringBuffer("I am StringBuffer");  
  21.   System.out.println("Before change, sb is <" + sb + ">");  
  22.   change(sb);  
  23.   System.out.println("After change sb is <" + sb + ">");  
  24.  }  
  25.  
  26.  public static void swap(Integer ia, Integer ib) {  
  27.   Integer temp = ia;  
  28.   ia = ib;  
  29.   ib = temp;  
  30.  } 

这很好解释,对于基本类型诸如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中的对象类型的值传递),可以通过*操作,改变指针指向的值。示例程序如下,一看便知:

 
 
 
  1. #include 
  2.  
  3. int main(){  
  4.  void test(int*, const char*);  
  5.  int i = 1;  
  6.  int* iptr = &i;  
  7.  cout<<"Before pass-by-value:"<<"\n\n";  
  8.  cout<<"i = "<<;  
  9.  cout<<"&i = "<<&i<<", It's address of i and value of iptr"<;  
  10.  cout<<"*iptr = "<<*iptr<<", It's value of i"<;  
  11.  cout<<"iptr = "<<;  
  12.  cout<<"&iptr = "<<&iptr<<", It's address of iptr-self"<<"\n\n";  
  13.    
  14.  test(iptr, "pass-by-iptr");  
  15.  
  16.  test(&i, "pass-by-&i");  
  17.  
  18.  return 0;  

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

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法

【编辑推荐】

  1. 简介学习C++总结之谈
  2. 对C++库函数进行学习探索总结笔记
  3. C++类库设计的基本构思与方法
  4. C++语言真的还有市场价值?
  5. C++类库设计的基本构思与方法

文章名称:浅析C++函数参数与Java传递比较
链接URL:http://www.shufengxianlan.com/qtweb/news24/278474.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联