黑马程序员技术交流社区

标题: oc 类方法中变量这里为何是这样? [打印本页]

作者: lewisen    时间: 2014-5-7 23:25
标题: oc 类方法中变量这里为何是这样?
本帖最后由 lewisen 于 2014-5-12 09:21 编辑
  1. #import <Foundation/Foundation.h>
  2. @interface Person : NSObject
  3. {
  4.     @public
  5.     int age;
  6.     double weight;
  7. }

  8. -(void)walk;
  9. @end


  10. @implementation Person
  11. -(void)walk
  12. {
  13.     NSLog(@"年龄是%d、体重是%.2f的人在散步。",age,weight);   //为什么不是p-〉age
  14. }
  15. @end

  16. int main()
  17. {
  18.     Person *p = [Person new];
  19.     p->age = 30;
  20.     p->weight =70;
  21.     [p walk];
  22.     return 0;
  23. }
复制代码


如上所示,在方法中的两个属性变量为什么不是p->age 和 p->weight,而是不加p呢?求两者区别,谢谢
作者: 崔维友    时间: 2014-5-8 08:08
本帖最后由 崔维友 于 2014-5-8 08:10 编辑

你可以比照一下这段代码:
  1. #import <Foundation/Foundation.h>

  2. @implementation Person : NSObject
  3.         {
  4.             @public
  5.             int age;
  6.             double weight;
  7.         }
  8.         -(void)walk
  9.         {
  10.             NSLog(@"年龄是%d、体重是%.2f的人在散步。",age,weight);   //内部变量
  11.         }
  12. @end

  13. int main()
  14. {
  15.     Person *p = [Person new];
  16.     p->age = 30;
  17.     p->weight =70;
  18.     [p walk];
  19.     return 0;
  20. }
复制代码

当不使用指针访问的时候其实相当于内部变量,比照C语言就明白了。






作者: 葬花桥    时间: 2014-5-8 08:27
指针p是在main函数是定义的啊,它只能在main函数中用,在方法中你可以再定义一个p,但是这两者是不同的两个变量。这是变量的作用域问题
作者: Jine    时间: 2014-5-8 22:10
因为 NSLog(@"年龄是%d、体重是%.2f的人在散步。",age,weight);  它是将p里的成员变量输出和显示出来,而p-

>age 和 p->weight是给成员变量赋值啊!所以 不能用p->age 和 p->weight不然肯定出错!
作者: 詹绪长    时间: 2014-5-11 10:46
p->age 和 p->weight是给age 和weight 赋值( p->age = 30;p->weight =70;),所以达不到你想要的结果。




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