值传递与地址传递

1、值传递(pass by value)是指在调用函数时将实际参数复制 一份传递到函数中,这样在函数中如果对 参数 进行修改,将不会影响到实际参数。

public static void main(String[] args) {
        int a = 10 ;
        test(a);
        System.out.println("a"+a);
    }
    public static void test(int y){
        y = 0 ;
        System.out.println("y"+y);
    }

此时输出结果为:
y0;
a10;
可以看出此时只是讲a的值传递给了test方法,而没有改变a的值,仍为10。
2、地址传递是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对 参数 所进行的修改,将影响到实际参数。

 public static void main(String[] args) {
        int [] array = new int[]{10};
        System.out.println(array[0]);
        System.out.println("========");
        test(array);
        System.out.println(array[0]);
    }
    public static void test(int [] y){
        y[0] = 0;
    }

此时输出结果为:
在这里插入图片描述
可以看出原来的数值已经被改变了,如果我们直接对array进行输出,此时输出的是地址值,而如果对前面代码中的a进行直接输出则为10。也就是说在第二个程序里,调用方法的时候将array的地址值传递给test方法,两者共用一个地址值,此时执行方法中的 y[0] = 0; 即将此地址值存放的数据变为0,此事再次进行输出array[0],很明显就是0。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指针值传递地址传递是两种不同的概念。在C语言中,函数参数可以通过值传递地址传递传递给函数。 指针值传递是指将指针变量作为参数传递给函数,函数中对指针所指向的内存进行操作。这种方式下,函数内部对指针的修改不会影响到原始的指针变量。但是,函数中对指针所指向的内存的修改会影响到原始内存。 地址传递是指将变量的地址作为参数传递给函数。这种方式下,函数内部对地址所对应的变量进行操作,会直接影响到原始变量的。通过地址传递,可以实现在函数内部对原始变量进行修改。 下面是一个示例代码,展示了指针值传递地址传递的区别: ```c #include <stdio.h> // 指针值传递 void pointerValuePass(int* ptr) { *ptr = 10; // 修改指针所指向的内存 ptr = NULL; // 修改指针本身不会影响原始指针 } // 地址传递 void addressPass(int* ptr) { *ptr = 20; // 修改地址对应的变量 ptr = NULL; // 修改指针本身不会影响原始指针 } int main() { int num = 0; int* ptr = &num; printf("Before pointerValuePass: num = %d\n", num); pointerValuePass(ptr); printf("After pointerValuePass: num = %d\n", num); printf("Before addressPass: num = %d\n", num); addressPass(&num); printf("After addressPass: num = %d\n", num); return 0; } ``` 输出结果为: ``` Before pointerValuePass: num = 0 After pointerValuePass: num = 10 Before addressPass: num = 10 After addressPass: num = 20 ``` 可以看到,指针值传递修改了指针所指向的内存,但没有修改原始指针的;而地址传递直接修改了原始变量的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值