指向对象的指针相互赋值的内存是如何表现的

//
//  main.m
//  7.27、练习 指向对象的指针相互赋值的内存是如何表现的

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    @public
    int _height;
    int _age;
}
- (void)show;
@end

@implementation Person

- (void)show{
    NSLog(@"身高是%i,年龄是%i",_height,_age);
}

@end

void test1(int mHeight,int mAge){
    mHeight=180;
    mAge=25;
}

void test2(Person *p){
    p->_height=180;
    p->_age=25;
}

void test3(Person *p){
    Person *newp=[Person new];
    newp=p; // 把P赋给newp就是改变newP的指向,使newp也指向
    
    newp->_height=190;
    newp->_age=40;
}

void test4(Person *p){
    Person *newp=[Person new];
    p=newp; //这样就会使p指向newp所指向的对象
    
    p->_height=200;
    p->_age=50;
}

int main(int argc, const char * argv[]) {
    
//    创建Person对象
    Person *p=[Person new];
//    初始化对象
    p->_height=175;
    p->_age=30;
    
    test1(p->_height, p->_age); // 这样调用函数并不会改变对象成员变量的值
    test2(p); //会改变值
    test3(p); //会改变值
    test4(p); // 不会改变值
    
    [p show];
    
    return 0;
}
原文地址:https://www.cnblogs.com/imChay/p/5590203.html