C言語関係掲示板

過去ログ

No.169.srand関数の引数NULLについて


No.1099

srand関数の引数NULLについて
投稿者---さと(2002/02/26 18:13:56)


 こんばんわ。いつも、お世話になっています。
 林晴比古さんの出しているC言語入門シニア編で、
乱数について、勉強をしていたのですが、

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void)
{
srand((unsigned)time(NULL));
printf("%d\n",rand());
}

 のsrand((unsigned)time(NULL));は、timeによる定番処理とか
いてあって、time 関数について、調べると、
#include<time.h>
time_t time(time_t *timeptr);
timeptrに入る値と、この関数の戻り値は同じものなので、
t=time(NULL); のようにつかっていいとありますが、なぜ、
NULLをつかっているのかがわかりません。NULLポインタについても、
調べてみましたが、よくわかりません。分かり易くおしえていただける
とうれしいです。では、失礼します。

No.1102

Re:srand関数の引数NULLについて
投稿者---ともじ(2002/02/26 22:30:37)


こんばんは。

> srand((unsigned)time(NULL));は、timeによる定番処理とか
>いてあって、time 関数について、調べると、
>#include<time.h>
>time_t time(time_t *timeptr);
>timeptrに入る値と、この関数の戻り値は同じものなので、
>t=time(NULL); のようにつかっていいとありますが、なぜ、
>NULLをつかっているのかがわかりません。NULLポインタについても、
>調べてみましたが、よくわかりません。分かり易くおしえていただける
>とうれしいです。では、失礼します。

「timeptrに入る値と、この関数の戻り値は同じもの」とありますが、
これはtimeptrがNULLでない場合に限られます。
つまり、NULLの場合は取得した時刻を返却するのみです。

srand関数の引数でtime関数を使う場合は、関数に値が返却されれば
用は済みますから、わざわざ時刻格納用のエリアを用意する必要もなく、
そのためNULLを使うのだと思います。


No.1103

Re:srand関数の引数NULLについて
投稿者---さと(2002/02/26 22:46:07)


 お返事どうもありがとうございます。

>「timeptrに入る値と、この関数の戻り値は同じもの」とありますが、
>これはtimeptrがNULLでない場合に限られます。
>つまり、NULLの場合は取得した時刻を返却するのみです。
>srand関数の引数でtime関数を使う場合は、関数に値が返却されれば
>用は済みますから、わざわざ時刻格納用のエリアを用意する必要もなく、
>そのためNULLを使うのだと思います。

 仕組みは、よくわかりました。ありがとうございました。
でも、NULLを引数にすると、現在の時間が取得できることが、
いまいちわかりません。NULLは、ゼロ番地をさすわけではなく、
どこもさしていないことをさすと、学校の先生に
おしえてもらったことがありますが、どこもさしていないものを
引数とすることで、エラーがでないこが自体が不思議なきがして
なりません。

 親切におしえてくださってどうもありがとうございます。
自分が、あいまいな理解だった、
「timeptrに入る値と、この関数の戻り値は同じもの」の説明、
とても助かりました。
 では、失礼します。

戻る


「初心者のためのポイント学習C言語」 Last modified:2002.03.16
Copyright(c) 2000-2002 TOMOJI All Rights Reserved