Ste*_*mit 13
[从一个重复的,现在删除的问题复制的答案.]
time()是一个非常非常古老的功能.它可以追溯到C语言甚至没有类型的那一天long.曾几何时,获得类似32位类型的唯一方法是使用两个ints 的数组- 那时ints是16位.
所以你打来电话
int now[2];
time(now);
Run Code Online (Sandbox Code Playgroud)
它将32位时间填入now[0]和now[1],一次填充16位.(这解释了为什么其他与时间相关的函数,例如localtime和ctime,也倾向于通过指针接受他们的时间参数.)
后来,dmr完成long了对编译器的添加,所以你可以开始说了
long now;
time(&now);
Run Code Online (Sandbox Code Playgroud)
后来,有人意识到如果time()继续并返回值,它将是有用的,而不是仅通过指针填充它.但是 - 向后兼容性是一件很棒的事情 - 为了所有仍在进行的代码的好处time(&now),time()函数必须继续支持指针参数.这就是为什么 - 这就是为什么向后兼容性并不总是如此美妙 - 如果你使用返回值,你仍然必须传递NULL作为指针:
long now = time(NULL);
Run Code Online (Sandbox Code Playgroud)
(当然,后来我们开始使用time_t而不是简单long,所以,例如,它可以更改为64位类型,避免y2.038k问题.)
[PS我实际上并不确定改变int [2]为long,并且添加返回值的更改发生在不同的时间; 他们可能同时发生了.但请注意,当时间表示为数组时,必须通过指针填充它,它不能作为值返回,因为当然C函数不能返回数组.