黑马程序员技术交流社区

标题: OC对象调用方法疑问 [打印本页]

作者: 菜鸟_琦    时间: 2014-10-28 21:28
标题: OC对象调用方法疑问
一段代码


  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4.     @public
  5.     int age;
  6.     double weight;
  7. }

  8. - (void)walk;
  9. - (void)eat;

  10. @end

  11. @implementation Person
  12. - (void)walk
  13. {
  14.     NSLog(@"%d %d", age, weight);
  15. }

  16. - (void)eat
  17. {
  18.     NSLog(@"%d %d", age, weight);
  19. }

  20. @end

  21. int main()
  22. {
  23.     Person *p = [Person new];
  24.     p->age = 20;
  25.     p->weight = 40;
  26.    
  27.     Person *p2 = p; // 关注这一段
  28.     p2->age = 30;
  29.     [p walk];

  30.     return 0 ;
  31. }
复制代码


老师的视频讲解中说p2的值跟p的值相等,个人觉得不是相等啊,p2中存储的应该是p的地址啊,而p中存储的是对象的地址啊,

作者: 菜鸟_琦    时间: 2014-10-28 21:31
不好意思,此贴发了两遍  网速问题
作者: 微雨独行    时间: 2014-10-29 08:27
本帖最后由 微雨独行 于 2014-10-29 08:37 编辑

Person *p2 = p;
表示p2 也指向了 p所指向的对象,所以p2 -> age = 30; 就相当于还是给p所指向的对象的成员变量_age赋值,所以打印结果是 年龄30 体重40的人在走。

Person *p2 = p; 这里并不是说p2获取p的地址,p2和p都是指针变量。比如说  int  a = b; a b都是int类型,这句相当于把b赋值给a,所有a b 是相等的。
p2和p只不过是指针类型,但是跟int等其他数据类型是一个道理。
要是获取p的地址,应该是
Person *p2 = &p;
这就是指向指针的指针了。

注: 指针的本质是地址,是一个常量,它本身就是地址
指针变量不是地址,它只是用来存放地址的,是一个变量,要获取指针变量的地址,还是要用  取地址运算符&指针变量只有获取xx的地址,才能说明它指向了xx的存储空间。

作者: 菜鸟_琦    时间: 2014-10-29 12:38
微雨独行 发表于 2014-10-29 08:27
Person *p2 = p;
表示p2 也指向了 p所指向的对象,所以p2 -> age = 30; 就相当于还是给p所指向的对象的成 ...

恩恩,分析的很详细,完全看懂了,但是有时候还是会弄混的
作者: 微雨独行    时间: 2014-10-29 13:43
菜鸟_琦 发表于 2014-10-29 12:38
恩恩,分析的很详细,完全看懂了,但是有时候还是会弄混的

加油 争取早日进4期




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2