【发布时间】:2018-03-21 13:29:35
【问题描述】:
考虑以下程序:
#include <objc/nsobject.h>
#include <stdio.h>
void function(NSObject** object) {
printf("value of NSObject** in function: %p\n", object);
}
int main() {
NSObject* object;
printf("value of NSObject** in main: %p\n", &object);
function(&object);
}
程序输出(在 x86_64 上使用 -fobjc-arc 编译):
value of NSObject** in main: 0x7ffee1217668value of NSObject** in function: 0x7ffee1217660
为什么值不相等?它们偏移了 8 个字节,我发现这是出乎意料的。如果我将其更改为纯 C 类型(例如int**),那么它们都会打印相同的值。但是指向 Objetive-C 对象的双指针总是给出不同的值。
这里发生了什么,为什么&object 会评估为两个不同的值?
【问题讨论】:
标签: objective-c pointers memory-address