#import <Foundation/Foundation.h>
@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;
}