值传递丶指针传递丶引用传递的区别

1. 值传递

形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

2.指针传递

指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变

3.引用传递

引用则是某块内存的别名。引用是操作受限了的指针(仅容许取内容操作)。
引用只能在定义时被初始化一次,之后不可变,不可为空。

int a = 1; 
int b = 2; 
int &m = a; //m被初始化为a的引用
int &n = b; 
m = b; //并不能将m修改成为b的引用(引用的对象不可被改变), 只是把引用m的值改变成为6。 由于m是a的引用,所以a的值也变成了6。 

最后,总结一下指针和引用的相同点和不同点:

★相同点:

●都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。

★不同点:

●指针是一个实体,而引用仅是个别名;

●引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

●引用没有const,指针有constconst的指针不可变;(具体指没有int& const a这种形式,而const int& a是有     的,  前者指引用本身即别名不可以改变,这是当然的,所以不需要这种形式,后者指引用所指的值不可以改变

●引用不能为空,指针可以为空;

●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

●指针和引用的自增(++)运算意义不一样;

●引用是类型安全的,而指针不是 (引用比指针多了类型检查)



关于java中包装类型和对象类型的传递:

1.包装类型参数为值传递

2.对象类型参数为地址传递

public class Test{   
	static Test test=new Test();
	public int i=1;
	
	public static void main(String[] args) {   
		System.out.println(test+":main1"+":"+test.i); //输出 Test@c17164:main1:1
		test.print(test);
		System.out.println(test+":main2"+":"+test.i);//输出 Test@c17164:main2:2,因print方法中将obj对象变量i值改变为2
    } 

    public void  print(Object obj){
    	((Test)obj).i=2;
     	System.out.println(obj+":print1"+":"+((Test)obj).i);//输出 Test@c17164:main1:2 

    	 obj=new Test(); //实例化Test,变量obj存放该新实例的地址。 
    	((Test)obj).i=3;
    	System.out.println(obj.toString()+":print2"+":"+((Test)obj).i); //输出 Test@1fb8ee3:print2:3 ,因变量obj指向新的Test实例,对象存储的物理地址不同,故输出的hashCode不同
    }


}  
由代码可看出,对象变量的引用是可发生变化的,即java中对象的传递是地址传递,非引用传递。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
传递引用传递指针传递是 C++ 中常用的参数传递方式,它们之间有以下区别: 1. 传递:通过传递方式,函数会创建参数的副本,并在函数内部使用该副本进行操作。对参数的修改不会影响原始传递适用于参数不需要被修改的情况,可以保护原始数据的安全性。但是,对于大型对象或复杂数据结构,由于需要复制参数的副本,可能会带来性能开销。 2. 引用传递:通过引用传递方式,函数会直接操作原始,而不是创建副本。对参数的修改会直接影响原始引用传递适用于需要修改参数,并且避免复制大型对象的情况。它提供了更高的性能,并且能够使函数内部的修改反映到原始数据上。 3. 指针传递:通过指针传递方式,函数接收一个指向原始指针。函数可以通过解引用指针来操作原始,并且可以修改指针指向的内存。与引用类似,指针传递也可以用于修改参数,并且能够避免复制大型对象。但是,需要注意的是指针可能为空(nullptr),需要进行空指针检查。 需要注意的是,无论是引用传递还是指针传递,都可以用于修改参数的。但是引用传递在语法上更简洁,而指针传递可以提供更多的灵活性(如空指针处理、重新指向其他对象等)。 综上所述,传递引用传递指针传递在参数传递方式上有不同的特点和用途。在选择时,需要考虑参数的修改需求、性能开销和代码的可读性等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值