我学习了一些基本的C函数,并在某些手册中遇到过time(NULL)
。
这究竟是什么意思?
答案 0 :(得分:42)
您可以传入指向time_t
对象的指针,time
将填充当前时间(并且返回值与您指向的相同)。如果你传入NULL
,它只会忽略它,只返回一个代表当前时间的新time_t
对象。
答案 1 :(得分:28)
对time(NULL)
的调用返回当前日历时间(自1970年1月1日以来的秒数)。有关详细信息,请参阅this reference。通常,如果传入指向time_t
variable的指针,该指针变量将指向当前时间。
答案 2 :(得分:11)
[从duplicate, now-deleted question复制的答案。]
time()
是一个非常非常古老的功能。它可以追溯到C语言甚至没有类型long
的那一天。曾几何时,获得类似32位类型的唯一方法是使用两个int
s的数组 - 那时int
s为16位。
所以你打电话给
int now[2];
time(now);
它将32位时间填充到now[0]
和now[1]
,一次16位。 (这解释了为什么其他与时间相关的函数,例如localtime
和ctime
,也倾向于通过指针接受它们的时间参数。)
稍后,dmr已完成向编译器添加long
,因此您可以开始说
long now;
time(&now);
后来,有人意识到如果time()
继续并返回值,而不是仅仅通过指针填充它,它会很有用。但是 - 向后兼容性是一件很棒的事情 - 为了所有仍在进行time(&now)
的代码的好处,time()
函数必须继续支持指针参数。这就是为什么 - 这就是为什么向后兼容性并不总是如此美妙 - 如果您使用返回值,您仍然必须将NULL作为指针传递:
long now = time(NULL);
(当然,后来我们开始使用time_t
代替普通long
一段时间,因此,例如,它可以更改为64位类型,躲避{{ 3}}。)
[P.S。我确实不确定从int [2]
到long
的更改以及添加返回值的更改是在不同时间发生的;他们可能同时发生了。但请注意,当时间表示为数组时,已经通过指针填充,它不能作为值返回,因为当然C函数可以' t返回数组。]
答案 3 :(得分:3)
time
函数以秒为单位返回当前时间(作为time_t
值)(在Unix系统上,自1970年1月1日午夜起),它需要一个参数,a存储时间的time_t
指针。传递NULL
作为参数会导致time
将时间作为正常返回值返回,但不会将其存储在其他任何位置。
答案 4 :(得分:3)
Time
:它返回自1970年1月1日纪元以来经过的时间(以秒为单位)
答案 5 :(得分:2)
int main (void)
{
//print time in seconds from 1 Jan 1970 using c
float n = time(NULL);
printf("%.2f\n" , n);
}
这打印1481986944.00(此刻)。
答案 6 :(得分:1)
您必须参考documentation for ctime。 time
是一个函数,它接受time_t *
类型的一个参数(指向time_t
对象的指针)并为其分配当前时间。您也可以传递NULL
,然后使用返回的time_t值代替传递此指针。
答案 7 :(得分:0)
您可以传入指向time_t
对象的指针,该时间将填满当前时间(并且返回值与您指向的相同)。如果你传入NULL
,它只会忽略它,只返回一个代表当前时间的新time_t
对象。
Nb:time(&timer);
相当于timer = time(NULL);