java传递指针_指针,引用,值传递,引用传递

指针/引用

相同点:都是变量地址的概念

指针:指向一块内存,指针本身存的是这块内存的地址

引用:是这块内存的别名

c:

int a = 10;

int *b = &a;

*b = 5;

int *c = &b; // warning int* => int **

*c = 1; // 错误的用法,改变不了a的值

php:

$a = 10;

$b = &$a;

$b = 5;

$c = &$b;

$c = 1;

echo $a; // 输出1,a,b,c这三个变量都是那块内存的别名

赋值

c语言中只有值传递

比如结构体也是copy了一份变量

如果想改变实参的内容,只能用指针

struct_a go = {1};

func(go);

void func(struct_a a){

a.b = 10; // 并不会改变外边go的内容

}

php中class是引用传递,其他都是值传递

$a = new MyClass();

$a->a = 10;

$b = $a;

$b->a = 5;

echo $b->a; // 输出5,$b是

值得注意的是数组,虽说都是值传递,但表现不一样

c:

int a[5] = {1,2,3,4,5};

int *b = a;

b[0] = 10;

printf("%d\n",a[0]); // 输出10

php:

$a = [1,2,3,4,5];

$b = $a;

$b[0] = 10;

echo $a[0]; // 输出5

c语言中a表示的是数组a[5]的第一个变量的地址,所以赋值得用指针int *p

php中$b=$a那就是纯粹的值传递,把数组$a copy了一份

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值