次のコードがあります。
int arr[2][2][2]={10,3,4,5,6,7,8,9};
int *p;
printf("%u",arr);
p=(int *)arr;
printf("%u",p);
どの出力
64166
64164
しかし、私はそれを考えて、同じメモリアドレスp
をarr
指します。異なるアドレスが表示されるのはなぜですか?
でも同じコード
#include <stdio.h>
int main()
{
int arr[2][2][2]={10,3,4,5,6,7,8,9};
int *p;
printf("\n%u",arr);
p=(int *)arr;
printf("\n%u\n",p);
return 0;
}
同じ結果しか得られません。
コードを見てみましょう
int *p;
printf("%u",p);
p は、初期化された int ポインターです。メモリにあるものは何でも印刷します。
p=(int *)arr;
printf("%u",p);
p は現在、メモリ内の配列のアドレスを指しており、そのアドレスを出力します。