C中的时间(NULL)是啥?

Posted

技术标签:

【中文标题】C中的时间(NULL)是啥?【英文标题】:What is time(NULL) in C?C中的时间(NULL)是什么? 【发布时间】:2011-11-24 21:39:40 【问题描述】:

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

这到底是什么意思?

【问题讨论】:

【参考方案1】:

time(NULL) 的调用返回当前日历时间(自 1970 年 1 月 1 日以来的秒数)。有关详细信息,请参阅this reference。通常,如果您传入一个指向time_t variable 的指针,该指针变量将指向当前时间。

【讨论】:

+1。同样对于time_t 类型的变量timertime(&timer); 等价于timer = time(NULL);【参考方案2】:

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

【讨论】:

【参考方案3】:

time 函数返回当前时间(作为 time_t 值),以秒为单位(在 Unix 系统上,自 UTC 时间 1970 年 1 月 1 日午夜开始),它接受一个参数,time_t 指针其中存储时间。将NULL 作为参数传递会导致time 将时间作为正常返回值返回,但不会将其存储在其他任何地方。

【讨论】:

【参考方案4】:

您必须参考documentation for ctime。 time 是一个函数,它接受一个time_t * 类型的参数(指向time_t 对象的指针)并为其分配当前时间。除了传递这个指针,你也可以传递NULL,然后使用返回的time_t值来代替。

【讨论】:

这里所指的ctime是C++头<ctime>,与C头<time.h>类似。 (问题是关于 C,而不是 C++。)还有一个名为 ctime 的函数。【参考方案5】:

Time :它返回自 1970 年 1 月 1 日以来经过的时间(以秒为单位)

【讨论】:

【参考方案6】:

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

Nb:time(&timer); 等价于timer = time(NULL);

【讨论】:

【参考方案7】:
int main (void)
   
    //print time in seconds from 1 Jan 1970 using c   
    float n = time(NULL);   
    printf("%.2f\n" , n);      
      

这会打印 1481986944.00(此时)。

【讨论】:

这个答案是错误的,因为time返回time_t,存储到float时会丢失精度。【参考方案8】:

[从duplicate, now-deleted question复制的答案。]

time() 是一个非常非常古老的函数。它可以追溯到 C 语言甚至没有类型 long 的那一天。曾几何时,获得类似 32 位类型的唯一方法是使用包含两个 ints 的数组——那时 ints 是 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位类型,避开y2.038k problem。)

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

【讨论】:

2.4 Linux 内核有一个 64 位 time_t 的错误,如果你传入一个非 NULL 参数,它只会填充低 32 位而高位不变。

以上是关于C中的时间(NULL)是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C#中的??是啥意思

C语言 字符串处理函数strtok第二次及以后的调用中第一个参数要用NULL的原因是啥? 能不能解释下原理?

选择 null:D3 中 selectAll(null) 背后的原因是啥?

C语言中NULL是啥意思

javascript中原型链的结尾是啥——null或Object.prototype?

c语言NULL是啥意思?