今天本来看数据结构的,结果发现有这么句话srand(time(0)),注释是初始化随机数种子,结果发现time(0)不解,好像以前看到过,然后网上查了下,发现了time.h这个头文件中有此函数
typedef long time_t;
time_t time(time_t *);
这个函数的返回值和形参都是返回从1970年1月1日0时0分0秒到现在的秒数,所以用long型,当然也可以给形参传个NULL
往后看了下,还有几个实用函数
struct tm * gmtime(const time_t *);
struct tm * localtime(const time_t *);
tm定义成以下结构体
struct tm {
inttm_sec;
inttm_min;
inttm_hour;
inttm_mday;
inttm_mon;
inttm_year;
inttm_wday;
inttm_yday;
int tm_isdst;
};
看这函数名一个是获取格林威治时间,另一个是获取本地时区的时间
于是写了个程序测了下,还真是如此
time_t timer;
tm *stm;
time(&timer);
stm=localtime(&timer);
然后当前的时间信息就被保存在stm指向的结构体中。
好了回到正题
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
seed如果是固定值,那么每次产生的随机数也是固定不变的,通常的做法是以这样一句代码srand((unsigned)time(NULL));来取代,这样将使得种子为一个不固定的数,这样产生的随机数就不会每次执行都一样了。