std::outでポインタや変数のアドレスを表示する方法
提供: C++入門
2014年7月6日 (日) 21:55時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「C++ で変数やポインタのアドレスを表示するには、std::coutとstd::hexを利用します。coutとprintf() (stdout)が混在するとバッファ...」)
スポンサーリンク
C++ で変数やポインタのアドレスを表示するには、std::coutとstd::hexを利用します。coutとprintf() (stdout)が混在するとバッファリングによって、出力の順序が保証できなくなります。
読み方
- std::hex
- えすてぃーでぃー へっくす
- std
- :cout:えすてぃーでぃー しーあうと
- printf
- ぷりんとえふ
概要
C言語では、ポインタのアドレスやメモリのアドレスを表示するときに、
printf("%p\n", ptr); printf("%p\n", &i);
のように、printfと%pを使用していました。
C++では、std::coutとstd::hexを使用して、同様のことを実現できます。
C言語の関数であるprintf()を使うとC++っぽくなくなる、というのが問題なのではなく、coutとprintfがそれぞれバッファリングして、出力の順番が保証できなくなります。
変数のアドレスを表示する
変数iのアドレスを表示する方法は、以下の通りです。
int i = 0; cout << hex << &i << endl;
ポインタに格納されたアドレスを表示する
変数 p に格納されているアドレスを表示する方法は、以下の通りです。
void *p = std::malloc(sizeof (int) ); cout << hex << p << endl;
ソースコード
/* * std_hex1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> using namespace std; int main(int argc, char const* argv[]) { void *p = std::malloc(sizeof (int) ); int i = 0; cout << hex << p << endl; cout << hex << &i << endl; std::free(p); return 0; }
コンパイル
$ c++ std_hex1.cpp -o std_hex1
実行例
$ ./std_hex1 0x801c06058 0x7fffffffd6b4
関連項目
ツイート
スポンサーリンク