关于java与C++中的参数传递
来源:互联网 发布:电纸书推荐 知乎 编辑:程序博客网 时间:2024/05/21 18:37
闲来无事,对比一下以前学过的java和C++,记上一笔,以防以后忘记吧!
java分为基本类型和对象传递,对于基本类型的传递属于值复制的情况;而对于对象传递,修改的就是对象本身了。几种基本类型也有自己对应的类,例如int对应Integer这样子。String不是基本类型,传递的是对象,但是String需要注意的是immutable的,所以对于它的处理不能改变它本身,只可以重新赋给一个新String来改变值。
而C++的参数传递更复杂,在我看来主要是有两种,一种是值复制的情况(指针传递也可以看成值复制,不过传递的值是地址而已),另一种是引用传递(相当于变量的一个别名)。C++的指针其实就是内存中的一块地址而已。看到的一个比较好的例子是下面的例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
//值传递
void swap1(int p,int q)
{
int temp;
temp=p;
p=q;
q=temp;
}
//指针传递,函数体内只有指针值的变化
void swap2(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
//指针传递,函数体内只有指针的变化
void swap3(int *p,int *q)
{
int *temp;
temp=p;
p=q;
q=temp;
}
//引用传递,a的别名是p,b的别名是q
void swap4(int &p,int &q)
{
int temp;
temp=p;
p=q;
q=temp;
}
int main()
{
int a=1,b=2;
swap1(a,b);
swap2(&a,&b);
swap3(&a,&b);
swap4(a,b);
cout<<a<<" "<<b<<endl;
return 0;
}
只有swap2和swap4可以做到交换值。可以画栈中的示意图,牢记住指针其实就是地址!!!!!
对于内存中的地址分配,我觉得C++和Java是一样的,当然,这只是我自己短浅的认为。局部变量都是存储在栈当中,而动态变量则是存储在堆当中。
- 关于java与C++中的参数传递
- 关于java中的参数传递
- 关于java中的参数传递
- 关于C#中的参数传递问题
- 关于Java中的参数传递问题
- java中的参数传递与对象Clone
- C++与java中的参数传递
- java中的参数传递与引用
- C#中的参数传递
- C#中的参数传递
- C#中的参数传递
- C#中的参数传递
- JAVA关于参数传递
- 关于java参数传递
- java中的参数传递
- java中的参数传递
- Java中的参数传递
- java中的参数传递
- 如何清除IIS缓存
- 非const 引用形参
- sqlite分页查找
- 利用免费顶级域名,免费nat123域名解析服务,搭建免费企业邮箱
- win32宽字符串处理
- 关于java与C++中的参数传递
- IOS学习笔记-9Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
- 常用命令行DB2数据库备份命令
- HTML5——HTML5 中 DOM Storage 的应用
- 在线识别硬盘大小
- 题目1200:最大的两个数
- putty中使用vim,选中时激活vim的可视模式(visual)的问题解决
- Application Loader发布程序到iTunes
- C语言中struct与union的区别