您的位置:首页 > 其它

菜鸟之路-09

2015-11-02 08:45 204 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: