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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菜鸟_琦 中级黑马   /  2014-10-28 21:28  /  1000 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一段代码


  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中存储的是对象的地址啊,

4 个回复

倒序浏览
不好意思,此贴发了两遍  网速问题
回复 使用道具 举报
本帖最后由 微雨独行 于 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 08:27
Person *p2 = p;
表示p2 也指向了 p所指向的对象,所以p2 -> age = 30; 就相当于还是给p所指向的对象的成 ...

恩恩,分析的很详细,完全看懂了,但是有时候还是会弄混的
回复 使用道具 举报
菜鸟_琦 发表于 2014-10-29 12:38
恩恩,分析的很详细,完全看懂了,但是有时候还是会弄混的

加油 争取早日进4期
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马