什么是时间(空)在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语言甚至没有longtypes的一天。 曾几何时,获得类似32位types的唯一方法是使用两个int的数组 – 当int是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位的types,避免y2.038k的问题。)

[PS我实际上不确定从int [2]long的变化,以及添加返回值的变化发生在不同的时间; 他们可能同时发生。 但是请注意,当时间被表示为一个数组时,它必须通过一个指针来填充,它不能作为一个值返回,因为当然C函数不能返回数组。

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

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