首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中时间(NULL)是什么?

在C中时间(NULL)是什么?
EN

Stack Overflow用户
提问于 2011-09-26 10:58:16
回答 8查看 140.9K关注 0票数 60

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

这到底是什么意思?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-09-26 11:02:00

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

票数 47
EN

Stack Overflow用户

发布于 2011-09-26 11:01:55

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

票数 38
EN

Stack Overflow用户

发布于 2017-09-04 01:05:11

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

time()是一个非常非常老的函数。它可以追溯到C语言甚至还没有long类型的时代。曾几何时,获得32位类型的唯一方法是使用一个由两个int组成的数组--当时int是16位的。

所以你打电话给

代码语言:javascript
运行
复制
int now[2];
time(now);

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

后来,dmr完成了将long添加到编译器的工作,因此您可以开始说

代码语言:javascript
运行
复制
long now;
time(&now);

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

代码语言:javascript
运行
复制
long now = time(NULL);

(当然,更晚些时候,我们开始多次使用time_t而不是普通的long,例如,可以将其更改为64位类型,从而避开y2.038k problem。)

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

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7550269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档