测试代码:
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个字节。但测试结果让我很困惑。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您好!看起来您是在使用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部署等,请随时提问,我会基于阿里云的知识库为您提供帮助。