指定子はどうですか%p
および%Fp
次のコードで動作しますか?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
私はo/pを0000000000000055 0000000000000055
これがあなたが求めているものである場合、%pと%Fpはポインター、具体的にはポインターが参照するアドレスを出力します。また、コンピューターのアーキテクチャの一部を出力するため、16進数で出力します。
Cでは、ポインタは前述のメモリチャンクを参照する32ビットまたは64ビットの数値(マシンアーキテクチャによって異なる)であるため、ポインタとintの間でキャストできます。
そしてもちろん、16進数で55は10進数で85です。
%pは、ポインタアドレスを出力するためのものです。
10進数の85は16進数の55です。
システム上のポインターは64ビットなので、完全な16進数表現は0000000000000055です。
その目的は、実装定義の形式でポインター値を印刷することです。対応する引数はvoid *
値でなければなりません。
そして、%p
は、アドレスがシステムビットに依存しているポインターのアドレスを出力するために使用されます。
これが私のマシンからのコンパイル出力です:
format.c:7:5:警告:形式 '%p'はタイプ 'void *'の引数を期待しますが、引数2はタイプ 'int'を持ちます[-Wformat]
format.c:7:5:警告:形式 '%F'はタイプ 'double'の引数を想定していますが、引数3はタイプ 'int'を持っています[-Wformat]
したがって、警告はありますが、コンパイルは実行され、出力は0x55 0.000000pです。
あなたが最後にpを得ていないことに驚いています。コードと出力が一致しますか? iのアドレスが0x0 ... 055 ..であることも不可能ではないと思いますが、ここで何かが間違っているように見えます。
btw:%pの典型的な使用法は、アドレスを印刷することです。つまり、intではなく&iです。
@Myforwikが言ったことへの追加
%pは、ポインタアドレスを出力するためのものです。
%Fpは、おそらく->(0x1234:0x5678)の形式のFARポインターをフォーマットするために使用されます
10進数の85は16進数の55です。
今は大丈夫だと思います。
参照: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.htmlhttp://www.winehq .org/pipermail/wine-devel/2005-March/034390.html