srand(time(NULL))与srand(time(0))的区别

(越详细越好,谢谢啦)... (越详细越好,谢谢啦) 展开
 我来答
kicming
2015-05-21 · TA获得超过165个赞
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:68.6万
展开全部
1.概念A:srand用来设置随机数种子的,rand用来产生随机数的
srand(1);//1为随机的数的种子
printf("%d", rand());//因为种子为1不变,产生的随机数是不变的
2.void srand(unsigned int)查看参数为unsigned int
time_t time(time_t *);//time的构造函数带参time_t *
typedef long time_t; //time.h定义time_t为long
time(NULL);time(0)//返回的是一个long型时间值,取的是当前系统时间,因此总是变化的
3.srand(time(NULL))就是设置当前的时间值为种子,那么种子总是变化的
printf("%d", rand());//因为种子总是变化的,所以以该种子产生的随机数总是变化的
这里比较time(NULL)和time(0),没有多大意义啊
4.核心你该搞清楚 srand是怎么用的:srand定义种子,如果种子是个常量,那么产生的随机数不变,所以需要一个
总是变化的种子,而系统时间总是变化的将时间值转化成unsigned int传入srand就达到了产生可变种子的目的.因此
int iRet = rand()//产生的随机数每次都不一样
小例子:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i = 0;
srand( (unsigned)time(NULL));
//srand((unsigned int)time(0));
//srand(1);
for( i = 0; i < 100; i++ )printf("%d,[1,10]=%d\n", rand(), (rand()%10+1));
}
更多追问追答
追问
那srand(time(NULL))与srand(time(0))与等价咯
追答
@函数名称:     time 

函数原型: time_t time(time_t *timer)

函数功能: 得到机器的日历时间或者设置日历时间

函数返回: 机器日历时间

参数说明: timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,time_t是一个long类型

所属文件:

这里你要分开看啊,观念一定清楚
第一步分析:time(0)与time(NULL)的返回值是否相等

long l = 101;
long l1 = time(&l);
Sleep(1000);//更改时间的长短,可以看到当暂停时间大于1S,l1和l2的值不一样
//注释掉Sleep(1000)函数,l1==l2
long l2 = time(NULL);
printf("%d,%d\n", l1, l2);
问题是传0或传NULL,跟两个函数调用的时间的有关系,明白吗?调用的时间不一样,其结果不一样.
第二分析:
A:srand((unsigned int)time(0));
B:srand((unsigend int)time(NULL));
如果A句和B句顺序执行了,他们的值相同,当A执行了,这个时候主线程暂停了,过5S后,线程又被CPU调度了,那B句就改变了种的值了.
名片
2024-10-28 广告
作为优菁科技(上海)有限公司的一员,Altair HyperWorks是我们重点代理的CAE软件套件。该软件以其全面的仿真能力、丰富的建模工具和高效的优化设计功能著称,广泛应用于汽车、航空航天、能源及电子等行业。HyperWorks通过集成... 点击进入详情页
本回答由名片提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式