什么是时间(空)在C?
我学习了一些基本的C函数,并在某些手册中遇到了time(NULL)
。
这到底是什么意思?
你可以传递一个指向time_t
对象的指针,这个对象的time
将会填满当前时间(并且返回值与你所指向的值相同)。 如果你通过NULL
,它只是忽略它,只是返回一个新的time_t
对象,表示当前时间。
对time(NULL)
的调用返回当前的日历时间(1970年1月1日以来的秒数)。 详情请参阅此参考 。 通常情况下,如果你传入一个指向time_t
variables的指针,该值将指向当前时间。
time
函数返回当前时间(作为一个time_t
值),以秒为单位(在UNIX系统上自1970年1月1日午夜以来),并且需要一个参数, time_t
指针存储时间。 传递NULL
作为参数会导致time
以正常返回值的forms返回,但不会将其存储在其他任何地方。
Time
:它返回自1970年1月1日以来经过的时间
int main (void) { //print time in seconds from 1 Jan 1970 using c float n = time(NULL); printf("%.2f\n" , n); }
这打印1481986944.00(在这个时刻)。
你必须参考ctime的文档 。 time
是一个函数,它接受一个types为time_t *
参数(指向time_t
对象的指针)并为其指定当前时间。 除了传递这个指针之外,你还可以传递NULL
,然后使用返回的time_t值。
[从一个重复的,现在被删除的问题复制的答案]
time()
是一个非常非常古老的函数。 它回到了C语言甚至没有long
types的一天。 曾几何时,获得类似32位types的唯一方法是使用两个int
的数组 – 当int
是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位的types,避免y2.038k的问题。)
[PS我实际上不确定从int [2]
到long
的变化,以及添加返回值的变化发生在不同的时间; 他们可能同时发生。 但是请注意,当时间被表示为一个数组时,它必须通过一个指针来填充,它不能作为一个值返回,因为当然C函数不能返回数组。
你可以传递一个指向time_t
对象的指针,这个对象的时间将会填满当前时间(并且返回值与你所指向的值相同)。 如果你传入NULL
,它只是忽略它,只是返回一个代表当前时间的新的time_t
对象。
Nb:time(&timer);
相当于timer = time(NULL);