方法调用中的别名问题

class Letter {
	char c;
}

public class PassObject {
	static void f(Letter y) {
		y.c = 'z';
		System.out.println(y.c);
	}
	
	public static void main(String[] args) {
		Letter x = new Letter();
		x.c = 'a';
		System.out.println(x.c);
		f(x);
		System.out.println(x.c);
	}
}

在调用f()的时候,传递的是Letter对象的引用,而不是Letter对象的副本,因此在f()操作之后,改变的是函数外的字段的值.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f(char y)
{
  y = 'z';
}

void ff(char *y)
{
  *y = 'z';
}

int main(void)
{
  char x = 'x';
  printf("x is: %c(before pseudo change)\n", x);
  f(x);
  printf("x is: %c(after pseudo change)\n", x);
  ff(&x);
  printf("x is: %c(after veritable change)\n", x);

  return 0;
}

在C语言中,如果进行参数传递,则默认传递的是副本.

转载于:https://my.oschina.net/u/3008297/blog/793181

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值