「std::outでポインタや変数のアドレスを表示する方法」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「C++ で変数やポインタのアドレスを表示するには、std::coutとstd::hexを利用します。coutとprintf() (stdout)が混在するとバッファ...」)
(相違点なし)

2014年7月6日 (日) 21:55時点における版

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

関連項目