作为开发人员,入门级的理解,就是值传递和地址传递的区别,这是C语言中的基础。今天通过一个oc的demo理解一下面向对象中的值传递和地址传递,首先定义一个自定义类MyFunction,定义值传递和地址传递的方法
-(int)byValue:(int)x
{
x++;
return x;
}
-(int)byAddress:(int *)x
{
(*x)++;
return *x;
}
在controller里,生成这个类的实例,并写测试代码:
TRMyFunction *m = [TRMyFunction alloc];
//值传递
int x = 10;
int y = [m byValue:x];
self.outputLabel.text = [NSString stringWithFormat:@"x=%d,y=%d", x, y];
//地址传递
y = [m byAddress:&x];
self.outputLabel.text = [NSString stringWithFormat:@"x=%d,y=%d", x, y];
想想一下输出结果是什么。第一个输出为10,11,第二个输出为11,11
因为第二个是地址传递,给Y赋值的时候,我们其实是拿到了x的地址,这样对x+1其实就是对x的内存地址中的x做了修改。也就是说修改了x本身。画了两张图帮助大家理解
值传递:
地址传递: