voidってなに?
C言語はデータ型によって情報のサイズや、情報の種類を決めている。
void型はそのデータ型の一つ。char, int, floatなどのデータ型と同じデータ型という概念。
ただし、void型の変数は作れない
void i; // NGです
##void型とは、型がないことを示す型
0の概念と似ている。無いことを明示的に示す。
そう言えばあんま意識してなかったけど、ここでも使われている。
int main(void)
{
return 0;
}
main(void)は引数を必要としないことを明示している。
void func1() {
}
void func2(void) {
}
int main(int argc, char *argv[]) {
func1();
func1("Hello"); // エラーにならない
func2();
func2("Hello"); // エラーになる
}
4通りの関数
関数には4通り考えられる。
- 引数あり、戻り値あり
- 引数あり、戻り値なし(void)
- 引数なし(void)、戻り値あり
- 引数なし(void)、戻り値なし(void)
無いということを示すためのvoidがあることで以下の型の体型がキレイに維持できる。
void func(void){
// コード
}
voidのポインタ型(汎用ポインタ)
voidも型なので、voidのポインタ型も存在する。
参照先のデータ型がないポインタ__という意味。
voidのポインタ型を使った参照先への__読み書きはできない。
数字を0で割れないみたいなもん。ルールを作るための存在だから例外の扱い。
できることは、アドレスの格納のみ
__様々な型のアドレスを受け入れることに使える__ほか、意図的に、アドレスだけを使用して、メモリアクセスができないように制限するといった使い方も可能。
この様々な型を受け入れられる性質から、
別名、__汎用ポインタ__と言われる。
参考
NULL と '\0' の違い
http://www.kis-lab.com/serikashiki/C/C01.html
C言語関数辞典 - C言語用語集 空ポインタ(null pointer)
http://www.c-tipsref.com/words/null_pointer.html
C言語 void型の意味と使い方【void型ポインタの扱い方も解説】
https://monozukuri-c.com/langc-funclist-void/