こんにちは､ そしてお帰りなさい｡
今回の講義では､ ボイドポインタについて少しお話したいと思います｡
voidというキーワードは､ 関数の話をしたときに使ったことがあるので知っています｡
主に､ 関数からデータを返したくない場合､ 関数のシグネチャの一部としてvoidを使用します｡
avoid pointerを使用する場合はどうでしょうか？
さて､ voidという型名は､ どんな型もないことを意味します｡
つまり､ void star型のポインタは､ 任意の型のデータのアドレスを格納することができるので､
自由度が高いのです｡
ポインタとして何を格納するかわからない場合は､ void starと言えばいいんですね､
なかなか気の利いた話です｡ 通常､ 関数の中で関数のパラメータに使用されます｡
そのため､ void starは､ 型に依存しない方法でデータを扱う関数のパラメータ型や戻り値型としてよく使われます｡
そのため､ void star ポインターを取るようにすれば､
関数をより柔軟に使えるようになります｡
基本的には､ 関数が複数の型の変数を受け取ることができることを意味しますが､
参照解除の際に何らかの方法でキャストする必要があるため､
完全に柔軟というわけではありません｡
だから､ どんな種類のポインタでも､ void型の値として渡すことができる｡
voidポインタは､ それがどのような種類のオブジェクトを指しているのかを知らない｡
だから､ 直接参照することはできない｡ そこで､
void starと一緒に本当のヒヤッとすることがあるのだ｡
異なるデータ型に対して長く柔軟に対応できるのが魅力ですが､ データ型がわかっていないと使えません｡
そのため､ ポインタを再参照する際には､
明示的にキャストを行う必要があります｡
int型の変数のアドレスはvoid型のポインタ変数に格納することができます｡
void starはその中にどんな型のデータでも格納できることを意味するからです｡
したがって､ void starポインタに格納されているアドレスのinterval値にアクセスしたいときは､
まずint型のポインタにキャストする必要があります｡
この例では､ ボイドスターポインターの使い方を説明します｡
私たちが定義した3つの変数､ integerとfloatとcharacterがあります｡
これから､ void star pointerを作成します｡
ポインタはvoid型なので､ int型であるiのアドレスを代入すればよい｡
浮動小数点であるfのアドレスを割り当て､
文字であるchのアドレスを割り当てることができるのです｡
唯一の問題は､ 参照解除するときに､ その型を知っていなければならないことですが､ それでもこの利点はわかりますね｡
この利点は､ 1つの変数タイプを作成するだけで､ そこに複数の異なるアドレスを格納できることです｡
でも､ 使いたいときはいつでも､ それをスターで使わなければならない｡
そして､ データをプリントアウトするときに､ inの星印がポインタをキャストして､
それをデリファレンスしているのがわかると思います｡
つまり､
vポインタの指す値を出力するわけですが､ その前に正しい型にキャストする必要があります｡
つまり､ これら3つのVポインターすべてで､ 蟻の場合は10と出力されるのです｡
フロートの場合は､ 2を出すことになります｡ 34.
そして､ ch､ charについては､ kがプリントアウトされることになります｡
今後は､ 関数のパラメータや戻り値の型に､ voidポインタが使われることが多くなると思います｡
そしてそれは､ 1つの宣言でvoidスターポインタを使用するだけでなく､
多くの異なるデータ型を割り当てるときと同様に､
それが本当に価値です｡ ありがとうございます｡