黑马程序员技术交流社区

标题: 基础的OC问题,求解 [打印本页]

作者: 小小黑马很成器    时间: 2015-5-17 17:24
标题: 基础的OC问题,求解
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    @public
    int age;
    double height;
}
- (void)print;
@end

void test1(int newAge, double newHeight);
void test2(Person *newP);
void test3(Person *newP);
void test4(Person *newP);

int main()
{
    Person *p = [Person new];
    p->age = 10;
    p->height = 1.5f;
   
    test1(p->age, p->height);
    [p print];
   
    test2(p);
    [p print];
   
    test3(p);
    [p print];
   
    test4(p);
    [p print];
   
    return 0;
}

@implementation Person
- (void)print
{
    NSLog(@"年龄=%d,身高=%f", age, height);
}
@end

void test1(int newAge, double newHeight)
{
    newAge = 10;
    newHeight = 1.6;
}

void test2(Person *newP)
{
    newP->age = 20;
    newP->height = 1.7;
}

void test3(Person *newP)
{
    Person *p2 = [Person new];
    p2->age = 40;
    p2->height = 1.8;
    newP = p2;
   
    newP->age = 30;
}

void test4(Person *newP)
{
    Person *p2 = newP;
    p2->age = 50;
    p2->height = 1.9;
    newP->age = 60;
}

为什么调用test3函数的输出结果是
年龄=20,身高=1.700000

作者: 香草芭芙    时间: 2015-5-17 20:37
  1. void test3(Person *newP)
  2. {
  3.     // 1.执行到这 newP指针指向 p的存储空间
  4.     Person *p2 = [Person new];
  5.     p2->age = 40;
  6.     p2->height = 1.8;
  7.     newP = p2; // 2. newP指针指向 p2的存储空间,和原来的p没有关系了.

  8.     newP->age = 30; // 3. 和p没关系了 怎么改也没用.
  9. }
复制代码

作者: zhangshuai    时间: 2015-5-23 17:49
因该是  newP指针指向 p2的存储空间,和原来的p没有关系了;
没有办法改写 原来的指针




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