モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

voidへのポインタ (C++をもう一度)

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2014/12/22
最終更新最終更新
2018/10/07
記事区分記事区分
一般公開

目次

    低レイヤーのプログラミングとOS開発が趣味。C言語を使っています。

    0
    ステッカーを贈るとは?

    サンプルコード

    void へのポインタ void* には関数ポインタおよびメンバポインタを除く (← コンパイラによっては代入できてしまいますが独自仕様です) ポインタをキャストなしで代入できます。ただし void* のままでは、実体にアクセスすることも他のポインタに代入することもできません。事前に何らかの型のポインタ型にキャストする必要があります。

    一般に void* は型情報が完全に失われても問題ない場合に使用します。確かにキャストし直せばもとの型の値にアクセスできますが、そのような必要性のある場面には void* ではなく関数テンプレートの使用を検討したほうがよいです。void* をキャストするのは以下の HexDump のような場合です。

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    void HexDump(const void* vp, size_t size) {
        static const int WIDTH = 16; // 静的定数 
        const char* p = static_cast<const char*>(vp); // charは1バイト
        for(size_t i = 0; i < size; ++i) { // int と size_t の比較は環境によっては警告されるため i も size_t 型に。
            if(i % WIDTH == 0 && i != 0) { // ショートサーキット (EXPR && EXPR や EXPR || EXPR)
                cout << endl;
            }
            printf("%02X ", p[i]);
        }
        cout << endl;
    }
    
    int main() {
        int n = 0x12345678;
        char str[] = "ABCD";
        HexDump(&n, sizeof n); //=> 78 56 34 12 (リトルエンディアン )
        HexDump(str, sizeof str); //=> 41 42 43 44 00
    
        char ch = 'a';
        void* p = &ch;
    
        // char* cp = p; // エラーです
        char* cp = static_cast<char*>(p); // とします
    
        // cout << *p << endl; // エラーです
        cout << *static_cast<char*>(p) << endl; // とします
        cout << *(char*)p << endl; // static_cast を使用しない場合
    
        return 0;
    }
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    低レイヤーのプログラミングとOS開発が趣味。C言語を使っています。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事