什么是C中的时间(NULL)?

时间:2011-09-26 02:58:16

标签: c time

我学习了一些基本的C函数,并在某些手册中遇到过time(NULL)

这究竟是什么意思?

8 个答案:

答案 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位。 (这解释了为什么其他与时间相关的函数,例如localtimectime,也倾向于通过指针接受它们的时间参数。)

稍后,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 ctimetime是一个函数,它接受time_t *类型的一个参数(指向time_t对象的指针)并为其分配当前时间。您也可以传递NULL,然后使用返回的time_t值代替传递此指针。

答案 7 :(得分:0)

您可以传入指向time_t对象的指针,该时间将填满当前时间(并且返回值与您指向的相同)。如果你传入NULL,它只会忽略它,只返回一个代表当前时间的新time_t对象。

Nb:time(&timer);相当于timer = time(NULL);