質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2882閲覧

c++における、「void」「unsigned」「NULL」について質問です。

Daichi

総合スコア47

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/01/08 10:26

c++言語でvoidをよく使うのですがよく意味がわかりません。
voidは値を返す?返さない?と聞きますが意味がわかりません。
どなたか教えてください!!

あと、乱数生成する際にメルセンヌ・ツイスタを使用するのですが、
その時に
init_genrand((unsigned)time(NULL))
と書くのですが、unsignedとNULLの意味がよくわかりません。
こちらもどなたか教えてください。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

関数定義の関数名の前に出てくるvoidは値を返さないと言うことです。

(unsigned)NULLは困りましたね。逆に何がわかるのでしょう?
変数や値に型があるというのはわかりますか?関数の引数に型があるのはわかりますか?
ポインタはどの程度理解していますか?

投稿2015/01/08 13:20

otn

総合スコア84529

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/01/08 14:38

voidの値を返さない というのがなかなか理解できずに困ってます。 詳細を教えていただけると幸いです。 unsignedとNULLの件については解決しました。 ご回答ありがとうございます。
otn

2015/01/08 16:38

そもそも、関数とは何だと思っていますか?
Daichi

2015/01/08 17:57

答えを出す式のようなものですか??
otn

2015/01/08 23:12

初心者向けとしては、「ひとまとまりの処理を行う、いくつかの文・式をひとまとめにして名前を付けてプログラムの他の部分から呼び出せるようにしたもの」という理解の方が良いと思います。
Daichi

2015/01/09 01:58

なるほど。 ありがとうございます!!
guest

0

ベストアンサー

C使いではありませんが、基本的な所だけ。

voidは通常、戻り値の無い関数に利用します。
イレギュラーな使い方もありますが、それはそれで調べてみると面白いかも知れませんね。

void functionName(){}
int functionName(){}
の様な関数定義がありますが、最初につくvoidやintは戻り値の型宣言です。
つまり、void(無)が宣言されている場合、戻り値は無いのが普通です。

init_genrand((unsigned)time(NULL))については、
「init_genrand」が乱数生成の関数で、「(unsigned)time(NULL)」がseed値(※1)と言われるものです。

「(unsigned)」については、unsigned int(※2)への型変換だと思われます。
通常はunsigned intと記載すると思いますが、省略する事も可能なようですね。
場合によっては環境依存になりそうなので、あまりお勧めできる書き方ではない気がしますが。

「time(NULL)」については、単に時刻を取得しているだけだと思います。
「NULL」とは、プログラム上での「何もない」状態を表します。
これをtime関数の引数に入れる事で、現在時刻が取れる様ですね。
この戻り値が大きい数値の為、(unsigned)でキャストしているものと思われます。

※1、seed値とは
コンピュータは厳密に言えばランダムな値を生成する事は出来ません。
この為、毎回違う値を得る為の、基準になる数値を規定する必要があります。
これがseed値と言われるものです。
なので、ここで使う乱数が非常に頻繁に、且つ並列に利用される様な場合には、seed値には時刻だけを入れるべきではありません。
何故なら、同じseed値で生成された乱数発生器は、同じ値を生成してしまうからです。

※2、unsined intとは
コンピュータ上で扱う数値は通常、+と-を扱う為に、先頭に符号桁を持っています。
この符号桁を使わず、数値としての枠として扱うのがunsined系の型です。
メリットとしては、利用できるbit数が増える為、整数値として扱える桁数が増えます。

以上、ご参考になれば幸いです。

投稿2015/01/08 13:13

utun

総合スコア384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daichi

2015/01/08 14:37

ご回答ありがとうございます! unsignedとNULLについてはなんとなくわかりました! 戻り値というのがよくわからないです。すいません。
utun

2015/01/08 15:52

戻り値は関数を呼んで、関数内であれこれして帰ってくる結果です。 例えば、 int func(){ return 5; } という関数があった際、func()の戻り値はint型の「5」になります。 この辺は初歩の初歩なので、「c++ 関数 戻り値」とかで検索すればもっと詳しく説明されてるページがありますよ。
Daichi

2015/01/08 17:58

ありがとうございます! 少し理解できた気がします!!
guest

0

もう1つ、関数の引数リストにvoidを指定する場合があります。

lang

1int func(void); 2 3int func(void) { 4 return 0; 5}

プロトタイプ宣言やC++のメソッド宣言で引数がないことを明示的に示したい時に使います。

投稿2015/02/16 17:51

shinosan

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問