浅谈JAVA和C++两者的参数传递
来源:互联网 发布:python入门经典 网盘 编辑:程序博客网 时间:2024/05/16 00:34
- 我是从C++语言开始学习的,然后在学到JAVA的时候发现JAVA声称自己的参数传递只有按值传递,这让我就很头疼,准备慢慢的来分析下,看官觉得有不对的地方欢迎留言一起讨论。
- 先说C++的参数传递
- C++的参数传递分为按值传递、指针传递、引用传递接下来用一个简单的例子来说明:
#include<iostream>using namespace std;void swap1(int num1,int num2)//交换传递的值{ int temp; temp = num1; num1 = num2; num2 = temp; cout<<"swap函数中num1,num2的地址"<<&num1<<","<<&num2<<endl; cout<<"swap函数中num1,num2的值"<<num1<<","<<num2<<endl;}void swap2(int* num1,int* num2)//交换指针所指向的内容{ int temp; temp = *num1; *num1 = *num2; *num2 = temp; cout<<"swap函数中num1,num2的地址"<<num1<<","<<num2<<endl; cout<<"swap函数中num1,num2的值"<<*num1<<","<<*num2<<endl;}void swap3(int* num1,int* num2)//交换指针{ int* temp; temp = num1; num1 = num2; num2 = temp; cout<<"swap函数中num1,num2的地址"<<num1<<","<<num2<<endl; cout<<"swap函数中num1,num2的值"<<*num1<<","<<*num2<<endl;}void swap4(int &num1,int &num2){ int temp = num1; num1 = num2; num2 = temp; cout<<"swap函数中num1,num2的地址"<<&num1<<","<<&num2<<endl; cout<<"swap函数中num1,num2的值"<<num1<<","<<num2<<endl;}int main(){ int num1,num2; num1 = 777; num2 = 222; cout<<"swap函数之前main函数中num1,num2的值"<<num1<<","<<num2<<endl; cout<<"swap函数之前num1,num2的地址"<<&num1<<","<<&num2<<endl; // swap1(num1,num2); // swap2(&num1,&num2); // swap3(&num1,&num2); swap4(num1,num2); cout<<"swap函数之后main函数中num1,num2的值"<<num1<<","<<num2<<endl; return 0;}
- 在codeblocks下运行的,建议运行自行观察。
- 从结果可以看出
swap1(int,int)中,swap1只是将num1,num2的值复制到另一个内存区间进行操作,所以并不会影响main函数里的num1和num2
swap2(int*,int*)和swap3都为指针传递,所不同的是swap2中是直接对指针指向的值进行操作,而swap3仅仅是交换指针内存地址。有人举了个例子就是指针是线,变量的实际地址是气球。指针可以通过线去操作气球。当然也可以多根线(指针)指向同一个气球。
执行后就不画了,swap2里的num1和num2指针通过线直接操作气球也就是main函数里面的数,进行实际性的更改。所以num1和num2的值交换了。swap3函数我直接画图,执行前也是如上图swap2执行前一致
运行之后仅仅是交换了2个指针所指向的内存,并没有进行实际的操作,所以并不会改变main函数中的值。swap4属于引用传递&m_nickName = m,这个赋值表达式的m_nickName其实就是m的别名,对m_nickName的操作其实就是对m的操作。
swap4是直接对num1和num2进行操作。
感兴趣的同学可以将swap4中分配给num1和num2的地址(swap4函数中)直接删除,因为我不清楚如何删除。如果地址清空,报错,或者main函数无法输出,这就说明是直接进行操作的。
下次写为什么数组arr[]按swap1方法传递参数确改变了实际的值,以及JAVA的对象传递和String类的特殊情况
待续…….
0 0
- 浅谈JAVA和C++两者的参数传递
- NDK java和c参数传递
- 浅谈函数的参数传递
- Java的参数传递有值传递和引用传递
- C++参数传递 和 java参数传递的异同
- 汇编和C语言的参数传递
- 【Unity&UGUI&NGUI】浅谈UGUI和NGUI两者的优劣
- c/c++/java,函数调用的参数的传递方法
- Java函数参数的值传递和引用传递
- Java 方法参数的值传递和引用传递
- java实现C语言解释器:无参数传递的函数调用的解释和执行
- JNI学习2 C和Java参数传递
- 做JNI接口其中涉及到参数在C 和JAVA 之间的传递。
- Java的方法的参数传递,值传递和引用传递还有String字符串传递
- java的参数传递
- JAVA的参数传递
- Java-参数的传递
- Java的参数传递
- HDU 4289--Control【最小割 && 拆点】
- POJ 1260 Pearls (DP)
- 由SDK版本引起的bug及自己易犯的错误
- 海量数据找中位数
- 编程技术面试的五大要点
- 浅谈JAVA和C++两者的参数传递
- Android:实现点击图片时图片变暗的效果
- Server Tomcat v8.0 Server at localhost failed to start.
- 数组最大差值以及不用除法求比例
- ASI 与 AFN的区别要点
- Android Parcelable
- 从远程库克隆
- hihocoder1233 搜索+状态压缩 我是菜比
- 数据结构与算法分析2.16