开发者社区 问答 正文

为什么在64位结构的IOS中,数字指针的地址增加了一个字节,而不是八个字节?

测试代码:

NSNumber *n1 = @1;
NSNumber *n2 = @2;
NSNumber *n3 = @3;
NSLog(@"\n- %p\n - %p\n - %p\n", &n1, &n2, &n3);

地址号的指针:

// pointer address of numbers
 - 0x7ffeef66e138
 - 0x7ffeef66e130
 - 0x7ffeef66e128

指针在64位IOS体系结构中需要8个字节,所以我认为连续数字的地址应该增加8个字节。但测试结果让我很困惑。

展开
收起
游客5akardh5cojhg 2019-12-06 14:55:59 580 分享 版权
阿里云 AI 助理回答

您好!看起来您是在使用Objective-C语言编写代码,并且想要打印出几个NSNumber对象的地址。不过,您的代码似乎被截断了,没有完整展示如何使用这些NSNumber对象以及NSLog来打印地址。让我帮您补全并解释这段代码应该如何编写和理解:

NSNumber *n1 = @1;
NSNumber *n2 = @2;
NSNumber *n3 = @3;

NSLog(@"\n- %@\n - %@\n - %@\n", n1, n2, n3);

在这个修正后的示例中,我做了以下几点调整: 1. 使用%@而非%p: 通常,%p用于格式化输出指针(即内存地址),但NSNumber对象作为Objective-C的对象,直接使用%@来打印其描述更为合适。这将调用对象的description方法,给出一个易读的表示。 2. 直接使用NSNumber字面量: 您已经正确地使用了NSNumber的字面量语法 @1, @2, @3 来创建NSNumber对象,无需修改。

如果您确实需要打印出这些NSNumber对象的内存地址(这在调试时可能有用,但不常见),那么可以这样修改:

NSNumber *n1 = @1;
NSNumber *n2 = @2;
NSNumber *n3 = @3;

NSLog(@"\n- %p\n - %p\n - %p\n", n1, n2, n3);

这里,我恢复了您原本想使用的%p,它会打印出每个NSNumber对象的内存地址。请注意,由于Objective-C的对象分配在堆上,每次程序运行时这些地址可能会有所不同。

这段代码与阿里云产品或服务没有直接关联,它纯粹是关于Objective-C编程的基础知识。如果您有关于阿里云产品的具体问题,比如ECS服务器配置、OSS存储使用、函数计算FC部署等,请随时提问,我会基于阿里云的知识库为您提供帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答