本文共 1652 字,大约阅读时间需要 5 分钟。
rand函数可以产生一个随机数,rand() 头文件为<stdlib.h>,其函数原型为:
int rand(void);
rand() 会返回一个0~RAND_MAX 之间的整数,但是一段程序运行多次,rand返回的值始终是一样的。这是因为rand返回的随机值是一个伪随机值,就是说看起来返回的值是一个随机值,实际上这个返回值是由公式推导出来的,推导随机数的公式依赖于一个数,这个数就叫做种子。种子和返回的随机数之间的关系是一种正态分布关系。
而且种子在系统启动的时候就是一个确定的值,所以每次程序运行的随机值都是根据这个种子来算的,要想在程序运行期间改变随机值,就要从根源入手,即改变种子的值。
也就是说!!!种子一定,产生的随机数就是一定的!要改变随机数,就要改变种子!!!
通过 srand() 函数来改变种子的值,也叫播种,其函数原型如下:
void srand(unsigned int seed);
我们可以通过改变种子的值来改变随机值。
可以看出,虽然产生了随机数,但是每次持续运行产生的随机数都是一样的,这是因为每次srand的值都是一样的,虽然改变了,但是相对每次运行,种子还没变。
参考:
下面会介绍解决这种问题的方法!
利用time() 函数可以得到当前的时间,时间是精确到秒的,利用这个动态变化的时间,可以来动态改变srand中的种子的值,达到了产生真正的随机值的作用。其函数原型如下:
#includetime_t time (time_t *timer);
经常配合srand使用如下:
srand((unsigned)time(NULL));
因为time(NULL)是以毫秒为单位的,所以一般还是可以产生随机数的。
#
与 ##
在C语言宏定义中,经常用到#
与##
其中#
的作用是把一个宏参数变为字符串
##
的作用是把两个宏参数连接在一起
如下:
Linux中一切皆文件,所以文件系统至关重要,文件系统分为三部分,第一部分是VFS,后面两部分就是Cache和真正的文件系统。
Linux的文件系统框架如图:
转载地址:http://otwzi.baihongyu.com/