• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:voidポインタ)

voidポインタとは?実行結果について知りたい

このQ&Aのポイント
  • mac osx環境でのvoidポインタの使い方について教えてください。
  • あるサンプルコードを実行した結果が予想外だったので、その原因を教えてください。
  • 実行結果とdの値について、環境の影響かどうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

printfに対して、"%s"を指示したので、パラメータは文字列への ポインタであると解釈します。文字列はnull(0x00)を終端とする というルールがあるので、ポインタの位置から、nullまでの文字列を 標準出力に出力しました。 "Kitty on your lap"は実際には"Kitty on your lap"+"\x00"になって います。 int i=65; は4バイトの領域に0x41、0x00、0x00、0x00となっています。 つまり、"A"+"\x00"+"\x00"+"\x00"です。だから"A"と表示されます。 doubleは8バイトの領域で、53ビットの仮数(1ビットは仮想)、11ビット の指数、1ビットの符号から成り立っています。10.101をバイト列に すると、"\xC1"+"\xCA"+"\xA1"+"\x45"+"\xB6"+"\x33"+"\x24"+"\x40" となります。これがどんな文字列になるかは・・・ですね。因みに65は "\x00"+"\x00"+"\x00"+"\x00"+"\x00"+"\x40"+"\x50"+"\x40"です。 これも"A"でないことは御理解願えると思います。 voidポインタはチェックがウルサクなったため出てきたものです。 ポインタやそれが指し示す先のデータ内容まで熟知していないならば 使用すべきではありません。

psychesine
質問者

お礼

ありがとうございます 理解できました

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

そのとあるページに解説は書いてないでしょうか 何を言いたいサンプルなのかが不明ですね 間違ったプログラムと言いたいのだとは思いますが。

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

ポインタの理解が出来ていません。 また”文字列の最後尾はnull”というルールも理解できていないようです。 intやdoubleの変数に値をセットして、そのポインタを文字列の先頭ポインタとして扱い、正しく動作するはずがありません。 C言語の基礎から勉強する必要があると思います。

関連するQ&A