[C++] オブジェクトのアドレスを表示

オブジェクトのアドレスを表示するコードです。
一言で言えば stati_cast で void のポインタにキャストして stream に渡してるということです。

#include <iostream>
#include <vector>

void showAddress() {
    
    std::vector<char> vec(100);
    
    //vectorオブジェクトのアドレスを表示
    std::cout << "vec   = "
         << static_cast<void *>(&vec)
    << std::endl;
    
    //vector内部で使われているバッファのアドレスを表示
    std::cout << "data  = " <<
         static_cast<void *>(vec.data())
    << std::endl;

    // new して確保したchar配列のアドレスを表示
    char *chars = new char[100];
    std::cout << "chars = " <<
        static_cast<void *>(chars)
    << std::endl;
}

int main(){

    showAddress();
}

出力(Mac上のXcodeでビルドし実行)

$ ./ShowAddress
vec   = 0x7fff5fbff6e8
data  = 0x100400100
chars = 0x100400170

vector オブジェクトはスタック上に、vector内部で確保されるバッファとnewで確保したオブジェクトは別のメモリ領域に確保されている様子がみえます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です