值传递与地址传递

作为开发人员,入门级的理解,就是值传递和地址传递的区别,这是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本身。画了两张图帮助大家理解

值传递:


地址传递:

猜你喜欢

转载自blog.csdn.net/lee727n/article/details/79915602