菜鸟之路-09

#import



@interface Person : NSObject{

    @public

    NSString *_name;

    int _age;

}


@end


@implementation Person



@end


@interface Dog : NSObject{

    @public

    NSString *_color;

}

-(Person *)lab;

@end


@implementation Dog


//-(类名 *)方法名:参数列表

-(Person *)lab{

    Person *p=[Person new];

      p->_name=@"黄瓜";

    p->_age = 16;

    return p;

}


@end

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        Dog *d =[Dog new];//只要是new就开辟了新的堆内存空间

        

     Person *p1= [d lab];//只要是new就开辟了新的堆内存空间  此处调用了Person new

        NSLog(@"姓名:%@  年龄:%d",p1->_name,p1->_age);

        

        Person *p2=[d lab];//只要是new就开辟了新的堆内存空间   此处调用了Person new

        p2->_age=19;   //改变了p2所指的堆空间里面的成员变量,因为这个是引用传递,所以相应的堆空间里面的成员变量也会改变。

        p2->_name =@"黄豆";

         NSLog(@"姓名:%@  年龄:%d",p2->_name,p2->_age);

        

        

        Person *p3 =[d lab];

        Person *p4 =p3;

        NSLog(@"姓名:%@  年龄:%d",p4->_name,p4->_age);

        

        p3->_name = @"黄毛";

        p3->_age  =17; //为什么这里改变了p3所指的成员变量的值,p4的成员变量值夜改变了,因为p3 p4所指的堆空间是相同的,无论修改p3 p4他们的值都会发生改变。

        NSLog(@"姓名:%@  年龄:%d",p4->_name,p4->_age);


        

    }

    return 0;

}


你可能感兴趣的:(菜鸟之路-09)