C言語のvoidの使い方について
C言語のvoidの使い方について調べたので、まとめておく。
関数定義におけるvoidについて
関数定義におけるvoidは、単純に「戻り値がない関数」を作る時に使うもの。
void createFunction() {
処理
}
voidはmain関数に対して使うことができる。
ポインタとしてのvoid*
問題は、voidがvoid*
のようにポインタとして扱われている場合だ。このvoid*
は他のポインタ型のchar*
やint*
等とは一味違い、単純にアドレスを返すだけの型と言える。
実はchar*
やint*
等のポイント型は単純にアドレスを示しているのではなく、次のアドレスが何番目になるのかと言う情報を含まれているのだ。
これだけだと分かりにくいので、具体的な例を挙げる。
以下の例では、int*
型のポインタを作成しているコードである。
void main() { int i = 10; int* p; p = &i; }
上記のコードでは、変数iに整数10を入れて、そのiのポインタとしてpを書いている。 そして、以下のコードを追加したとしよう。
p = p + 1; /* p++ と書いても良い */
上記の処理ではポインタpに+1
をしている。仮にポインタpのアドレス番号を100とすると、p = p + 1
の計算でpに入る数字は101ではなく104となる。
なぜなら、ポインタpが指しているアドレスには変数int i = 10
が格納されているが、int
は4byte使う型であるからだ。(ポインタは変数などの最初のアドレスを取得している)
以上がvoid*
と他のポインタ型との違いだし、逆に言うとvoidポインタは極力使うのは避けるべきとも言える。
また、void*
については以下の記事達が詳しい。
参考記事:c - What does void* mean and how to use it? - Stack Overflow
参考記事:voidへのポインタ
参考記事:malloc
参考記事:基本的な演算子