A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大雕会飞 中级黑马   /  2015-11-16 22:58  /  1285 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字数限制没有帖全。
typedef enum
{
    kIColorBlack,
    kIColorGreen,
    kIColorBlue
}IColor;

typedef enum
{
    kSexMale,
    kSexFeMale,
    KSexYao
}Sex;

@interface Dog : NSObject
{
    @public
    IColor _color;// 颜色
    int _speed;// 速度
    Sex _sex;// 性别
    float _weight;// 体重
   
}

// 吃
- (void)eat;
// 咆哮
- (void)bark;
// 跑
- (void)run;
。。。。。。

#pragma mark - 人类
@interface Person : NSObject
{
    @public
    NSString *_name;// 名称
    Dog *_dog;// 狗 0fcc1    问题:这里为什么要这样创建???是创建一个Dog类的狗?为什么要用指针类呢?
}

// 喂狗
- (void)feedDog;
// 遛狗
- (void)liuDog;

@end

//    1.创建人对象
    Person *p = [Person new];
    p->_name = @"jack";
   
//    2.创建一条狗
    Dog *d = [Dog new];
    d->_color = kIColorBlack;
    d->_sex = KSexYao;
   
//    把狗给人
    p->_dog = d;//0fcc1把地址d给p指向的dog空间是啥意思??
   
    [p feedDog];
    [p liuDog];
    return 0;
}

1 个回复

倒序浏览
1.问题一,_dog是一个指针,只不过指向的数据不是简单的int而是一个复杂的数据块(Dog类)。此时Dog类并没有创建。可以这么理解,台式电脑生产时会预留USB接口,但是生产时没有实际的U盘也能造电脑。
2.问题二,p->dog = d;  p->_dog 和 d都是变量,这里是吧d变量的值传递给p->_dog变量。

感觉你纠结是没分清变量的地址和变量的值:
变量地址相当于门牌号,是不能修改的;变量的值是门内的东西,是可以变化的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马