a
とは両方とも*a
ポインタであるため、フォーマット指定子としてprintf()
使用する場合と同様に、これをフォーマットされた出力に出力し%p
ます。
そうしないと、コンパイラから次のような警告メッセージが表示されます。
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int (*)[2]’
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’
だからこれを試してみてください:
printf("%p\n",a);
printf("%p\n",*a);
3番目のケース**a
はタイプint
なので、%d
またはを使用することをお勧めします%i
printf("%d\n",**a);
C規格によると、
ISO c99 standard : 7.19.6 Formatted input/output functions
9 If a conversion specification is invalid, the behavior is undefined.
If any argument is not the correct type for the corresponding conversion
specification, the behavior is undefined.