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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小小黑马很成器

初级黑马

  • 黑马币:24

  • 帖子:9

  • 精华:0

#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

2 个回复

倒序浏览
  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. }
复制代码
回复 使用道具 举报
因该是  newP指针指向 p2的存储空间,和原来的p没有关系了;
没有办法改写 原来的指针
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马