これはアーキテクチャの問題である可能性があります。私はこれをOSXで実行しましたが、正常に実行されました。
#import <stdio.h>
int main()
{
int a;
printf("&a = %u\n",(unsigned int)&a);
printf("a\n");
printf("b\n");
printf("c\n");
printf("d\n");
}
ただし、コンパイル中に警告が表示されました。
warning: cast from pointer to integer of different size
私は64ビットマシンを使用しているため、64ビットポインターを32ビット整数に適合させることができません。代わりにこれを実行してみて、何が得られるかを確認してください。
#import <stdio.h>
int main()
{
int a;
printf("unsigned %ld\n", sizeof(unsigned)); // sizes reported in bytes
printf("int %ld\n", sizeof(int)); // same as unsigned
printf("long %ld\n", sizeof(long)); // should fit a pointer
printf("ptr %ld\n", sizeof(void*)); // size of a pointer
printf("&a = %lu\n", (unsigned long)&a); // should print out your pointer
printf("&a = %p\n", &a); // the Right Way of doing things
}
出力:
unsigned 4
int 4
long 8
ptr 8
&a = 140734544742408
&a = 0x7fff508c0808
編集:
あなたが知らなかった場合に備えて、unsigned
実際にはを意味しunsigned int
ます。同様に、long
実際にはを意味しlong int
ます。
また、値がその物理サイズを変更するかどうかにかかわらず、値がどのように解釈されるかだけですsigned
。unsigned
最初の2枚のプリントからそれを見ることができます。