在Objective C或C中分配指针

 你是谁你要知道_893 发布于 2023-02-09 13:51

在教授Objective-C类时,我用这个类比来解释指针的(有些令人困惑的)概念:

1)当你创建一个未初始化的变量时int val;,它会创建一个可以保存整数值的"桶" .存储桶本身具有内存地址.

在此输入图像描述

2)当你分配一个值与变量val = 5;,你这个值放到桶:

在此输入图像描述

3)指针变量(带有前导星号的变量*)就像int *ptr;是一个"桶",它不包含,而是另一个"桶" 的内存地址:

在此输入图像描述

4)对于指针变量,您不是指定另一个存储桶中包含的值,而是指定另一个存储桶的存储器地址.通过将&(&符号)字符放在变量名称前面,可以得到值桶的"桶地址" :

在此输入图像描述

话虽这么说,当一个方法已经返回一个指针变量(如NSString *)时,你已经获得了内存地址,而不必再使用它来请求它&.

为了说明这一点,在这个例子中,我们有2个桶:

NSString *text = @"Test";

第一个桶包含(@"Test"),第二个桶包含第一个桶的内存地址.或者,再次使用桶类比:@"Test"在左侧桶中,右侧桶(变量text)包含左侧桶的内存地址.通过运行这个我们可以看到:

NSLog(@"value: %@, bucket that contains value: %p, bucket that contains the memory address of the bucket containing the value: %p", text, text, &text);
// output: value: Test, bucket that contains value: 0x1032f5030, bucket that contains the memory address of the bucket containing the value: 0x7fff5c90bb68

希望这可以帮助!

2 个回答
    1. 你没有添加&,因为currentHost已经返回一个指针.看看它的标题:

      + (NSHost *)currentHost
      

      它返回一个NSHost*并将其分配给NSHost*.

      [NSHost currentHost] 将返回指向NSHost的特定实例的指针.

      这里也是一样的.localizedName返回指向NSString(NSString*)的指针,并将其指定给一个.

    2023-02-09 13:54 回答
  • 在教授Objective-C类时,我用这个类比来解释指针的(有些令人困惑的)概念:

    1)当你创建一个未初始化的变量时int val;,它会创建一个可以保存整数值的"桶" .存储桶本身具有内存地址.

    在此输入图像描述

    2)当你分配一个值与变量val = 5;,你这个值放到桶:

    在此输入图像描述

    3)指针变量(带有前导星号的变量*)就像int *ptr;是一个"桶",它不包含,而是另一个"桶" 的内存地址:

    在此输入图像描述

    4)对于指针变量,您不是指定另一个存储桶中包含的值,而是指定另一个存储桶的存储器地址.通过将&(&符号)字符放在变量名称前面,可以得到值桶的"桶地址" :

    在此输入图像描述

    话虽这么说,当一个方法已经返回一个指针变量(如NSString *)时,你已经获得了内存地址,而不必再使用它来请求它&.

    为了说明这一点,在这个例子中,我们有2个桶:

    NSString *text = @"Test";
    

    第一个桶包含(@"Test"),第二个桶包含第一个桶的内存地址.或者,再次使用桶类比:@"Test"在左侧桶中,右侧桶(变量text)包含左侧桶的内存地址.通过运行这个我们可以看到:

    NSLog(@"value: %@, bucket that contains value: %p, bucket that contains the memory address of the bucket containing the value: %p", text, text, &text);
    // output: value: Test, bucket that contains value: 0x1032f5030, bucket that contains the memory address of the bucket containing the value: 0x7fff5c90bb68
    

    希望这可以帮助!

    2023-02-09 13:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有