2

なぜこのプログラムは:

#include <stdio.h>
#include <Foundation/NSDate.h>
int main() {
    printf("%p\n", [NSDate distantPast]);
    return 0;
}

64 ビット マシンで不正なポインターを返しますか? (私の場合は0xc22d63c8c500000d)

4

1 に答える 1

4

これはタグ付きポインターです。これらには最下位ビットが設定されており、他のビットには型と値が含まれています。これらは、メモリ割り当てを回避する特定の型のコンパクトな表現を提供します。詳細については、Mike Ash のブログ記事を参照してください。

于 2013-06-06T09:59:02.620 に答える