汎用ポインタ


void型ポインタ

ポインタについては、ここまで読み進んできた方ならすでに自身があると思います
しかし、通常のポインタ型以外に特殊なポインタ型があります

ポインタ型でのみ存在する特殊な型で汎用ポインタと呼ばれるものです
実は、型名はよく見なれていますがvoid *型なのです
* が付いているのが異なる部分ですね

void型は、しつこいようですがポインタ型でのみ使用できるものです
通常の変数にはvoid型は存在しません

これはどのような型かというと、あらゆるポインタ型に変換できるポインタ型です
多くはどのような型も受け取れる関数を作成するのに使用されます
汎用ポインタを使用すれば、ポインタ型であればどのような型でも受け取ることができます

void型のポインタを逆参照するには必ず型キャストします
キャストはC言語では任意ですが、C++では必ず必要となります
void型ポインタはどのデータ型にも変換することができます

次のプログラムは、関数outString()にいろんな型のポインタを渡しています
当然、サイズはそれぞれがことなるので結果は保証されないということを忘れないでください
汎用ポインタは、代入されてもエラーを出さないためのようなものです
#include <stdio.h>

void outString(void *);

int main() {
        int i = 65 ;
        double d = 10.101;

        outString(&i);
        outString(&d);
        outString("Kitty on your lap");

        return 0;
}

void outString(void *text) {
        char *str = (char *)text;
        printf("%s\n" , str);
}
outString()関数は、あらゆるポインタ方を受け取ることができる関数です
受け取ったポインタの内容はchar型の文字列ポインタにキャストされ出力されます


void *

汎用ポインタを宣言します
const または volatile キーワードで宣言されていない任意の変数を指す事ができます
逆参照には、必ず目的の型にキャストしてからでなければ使えません



前のページへ戻る次のページへ