Относительно "почему NULL of srand (time (NULL)) дает time () случайное значение?"
Проверьте справочную страницу в time()
упоминается
time()
возвращает время в виде количества секунд с начала эпохи, 1970-01-01 00:00:00 +0000 ( UT C). Если t
не равно NULL, возвращаемое значение также сохраняется в памяти, на которую указывает t
.
В этом случае нам нужно только возвращаемое значение, и мы не нужно дополнительно хранить это значение в каком-либо буфере, поэтому мы передаем NULL
в качестве аргумента. Кроме того, возвращаемое значение равно не случайно , это количество секунд с начала эпохи 1970-01-01. Таким образом, каждый вызов обновляет значение (строго инкрементно).
Тем не менее, в отношении диапазона значений, возвращаемых при вызове rand()
Функция rand()
возвращает псевдослучайное целое число в диапазоне от 0
до RAND_MAX
включительно (т. Е. В математическом диапазоне [0, RAND_MAX]
).
Проверьте значение RAND_MAX
в вашей платформе.
Тем не менее, rand()
плохой PRNG, вы можете проверить эту ветку , чтобы найти лучший способ получить случайное число.