我学习了一些基本的C函数,并在一些手册中遇到过time(NULL)
。
这到底是什么意思?
发布于 2011-09-26 11:02:00
您可以传入一个指向time_t
对象的指针,time
将用当前时间填充该对象(返回值与您所指向的值相同)。如果传入NULL
,它就会忽略它,只返回一个表示当前时间的新time_t
对象。
发布于 2011-09-26 11:01:55
对time(NULL)
的调用返回当前日历时间(自1970年1月1日以来的秒数)。详情请参见this reference。通常,如果您传入一个指向time_t
指针的指针,该指针变量将指向当前时间。
发布于 2017-09-04 01:05:11
[从duplicate, now-deleted question复制的答案。]
time()
是一个非常非常老的函数。它可以追溯到C语言甚至还没有long
类型的时代。曾几何时,获得32位类型的唯一方法是使用一个由两个int
组成的数组--当时int
是16位的。
所以你打电话给
int now[2];
time(now);
它将32位时间填充到now[0]
和now[1]
中,一次16位。(这就解释了为什么其他与时间相关的函数,如localtime
和ctime
,也倾向于通过指针接受它们的时间参数。)
后来,dmr完成了将long
添加到编译器的工作,因此您可以开始说
long now;
time(&now);
后来,有人意识到,如果time()
继续返回值,而不是仅仅通过指针填充它,那么它会很有用。但是-向后兼容性是一件很棒的事情-为了所有仍在执行指针的代码的好处,time()
函数必须继续支持time(&now)
参数。这就是为什么--这也是为什么向后兼容性并不总是那么美妙的原因,毕竟--如果你使用返回值,你仍然需要传递NULL作为指针:
long now = time(NULL);
(当然,更晚些时候,我们开始多次使用time_t
而不是普通的long
,例如,可以将其更改为64位类型,从而避开y2.038k problem。)
[附注:我实际上不确定从int [2]
到long
的更改以及添加返回值的更改是在不同的时间发生的;它们可能是同时发生的。但请注意,当时间表示为数组时,它必须通过指针填充,它不能作为值返回,因为C函数当然不能返回数组。]
https://stackoverflow.com/questions/7550269
复制相似问题