为什么这个程序:
#include <stdio.h>
#include <Foundation/NSDate.h>
int main() {
printf("%p\n", [NSDate distantPast]);
return 0;
}
在64位计算机上返回一个坏指针? (在我的情况下为0xc22d63c8c500000d)
答案 0 :(得分:4)
它是一个标记指针 - 它们具有最低有效位设置,其他位包含类型和值。它们为某些类型提供了紧凑的表示,避免了内存分配。有关详细信息,请参阅Mike Ash's blog article