C中的时间(NULL)是多少?

C中的时间(NULL)是多少?,c,time,C,Time,我正在学习一些基本的C函数,并且在一些手册中遇到了time(NULL) 这到底意味着什么?调用time(NULL)返回当前日历时间(自1970年1月1日起的秒数)。有关详细信息,请参阅。通常,如果您传入一个指向时间的指针,该指针变量将指向当前时间。您可以传入一个指向时间对象的指针,该时间对象将填充当前时间(返回值与您指向的值相同)。如果传入NULL,它只会忽略它,只返回一个新的time\t对象,该对象表示当前时间。函数返回自某一点(在Unix系统上,自UTC 1970年1月1日午夜起)起以秒为单

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


这到底意味着什么?

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

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

函数返回自某一点(在Unix系统上,自UTC 1970年1月1日午夜起)起以秒为单位的当前时间(作为
time\t
值),并使用一个参数,存储时间的
时间\u t
指针。将
NULL
作为参数传递会导致
time
将时间作为正常返回值返回,但不会将其存储在任何其他位置。

您必须参考<代码>时间
是一个函数,它接受一个类型为
时间*
的参数(指向
时间
对象的指针)并为其指定当前时间。除了传递此指针,您还可以传递
NULL
,然后使用返回的时间值。

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

您可以传递指向时间将用当前时间填充的
time\t
对象的指针(返回值与您所指的值相同)。如果传入
NULL
,它只会忽略它,只会返回表示当前时间的新
time\t
对象

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

这将打印1481986944.00(此时)。

[答案从a复制。]

time()
是一个非常非常古老的函数。它可以追溯到C语言甚至没有类型
long
的那一天。很久以前,获得类似32位类型的东西的唯一方法是使用两个
int
s的数组,那时
int
s是16位

你打电话来了

int now[2];
time(now);
它将32位时间填充到
now[0]
now[1]
,一次16位。(这解释了为什么其他与时间相关的函数,如
localtime
ctime
,也倾向于通过指针接受它们的时间参数。)

稍后,完成了向编译器添加
long
,这样您就可以开始说

long now;
time(&now);
后来,有人意识到如果
time()
继续并返回值,而不仅仅是通过指针填充值,那么它会很有用。但是-向后兼容性是一件美妙的事情-为了所有仍在执行
time(&now)
的代码的好处,
time()
函数必须继续支持指针参数。这就是为什么——这也是为什么向后兼容性并不总是那么好的原因——如果使用返回值,仍然必须将NULL作为指针传递:

long now = time(NULL);
(当然,后来我们开始使用
time\u t
而不是简单的
long
来表示时间,因此,例如,可以将其更改为64位类型,从而避免使用时间。)


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

+1.同样对于类型为
time
的变量
timer
time(&timer);
相当于
timer=time(NULL);
time
,而不是
time
——并且自1970年以来的秒数不是由C语言指定的(它是POSIX).2.4 Linux内核有一个64位
time\u t
的错误,如果您传入一个非空参数,它将只填充较低的32位,而保留较高的位不变。这个答案是错误的,因为
time
返回
time\u t
,并且在存储到
float
中时将失去精度。
ctime
重新这里给出的是C++头标题<代码> <代码>,类似于C标题<代码> <代码>。(问题是关于C,不是C++)。还有一个函数叫做“代码> cTIM/<代码>。
long now = time(NULL);