time: 是一个函数,用于获取当前时间。NULL: 是一个宏,代表一个“空指针”或“零值”,用来表示“没有有效值”。
下面我们分开详细说明,然后再看它们如何一起使用。

(图片来源网络,侵删)
time 函数
time 函数是 C 标准库 <time.h> 中提供的一个函数,用于获取当前的日历时间。
函数原型
#include <time.h> time_t time(time_t *t);
参数
time_t *t: 这是一个指向time_t类型变量的指针。- 如果你传入一个有效的指针(
&my_time),函数会将获取到的时间值同时存入你提供的变量中。 - 如果你只想获取时间值,不关心存储位置,可以传入
NULL。
- 如果你传入一个有效的指针(
返回值
- 成功时,函数返回从 “纪元”(Epoch,通常是 1970年1月1日00:00:00 UTC) 到现在的秒数,这个值的类型是
time_t。 - 失败时,返回
(time_t)-1。
time_t 类型
time_t 是一个用于表示时间的算术类型,通常是 long int 或 long long int,它存储的是一个整数,代表秒数。
示例代码
#include <stdio.h>
#include <time.h> // 必须包含这个头文件
int main() {
// 方法一:传入 NULL,只使用返回值
time_t current_time1;
current_time1 = time(NULL); // 传入 NULL 表示我们不关心存储位置
printf("方法一获取的时间(秒数): %ld\n", current_time1);
// 方法二:传入一个指针,同时通过返回值和指针获取时间
time_t current_time2;
time_t return_value = time(¤t_time2); // 传入变量地址
printf("方法二获取的时间(秒数): %ld\n", return_value);
printf("通过指针获取的时间(秒数): %ld\n", current_time2);
// 验证两种方法获取的时间是否相同
if (current_time1 == current_time2) {
printf("两种方法获取的时间一致,\n");
}
return 0;
}
NULL 宏
NULL 是 C 语言中一个非常重要的概念,它不是一个关键字,而是一个宏。
定义
NULL 通常在 <stddef.h> 头文件中定义,其值是 0,在 C 语言中,整数 0 可以被隐式转换为任何类型的指针,NULL 就用来表示一个空指针。

(图片来源网络,侵删)
// NULL 的典型定义 #define NULL ((void *)0)
这个定义将 NULL 定义为一个指向 void 类型的指针,其值为 0,这使得它可以被赋值给任何类型的指针变量。
用途
NULL 主要用于以下几种情况,以表示“无”或“空”:
-
初始化指针变量:在声明一个指针时,最好立即将其初始化为
NULL,表示它目前不指向任何有效的内存地址。int *ptr = NULL; // ptr 是一个空指针
-
函数参数:当函数需要一个指针参数,但调用者不想提供具体数据时,可以传入
NULL,函数内部可以通过检查参数是否为NULL来执行不同的逻辑。
(图片来源网络,侵删)// 一个可以打印字符串,也可以只打印换行的函数 void print_message(const char *msg) { if (msg == NULL) { printf("\n"); // msg 是 NULL,只打印换行 } else { printf("%s\n", msg); // 否则打印字符串 } } -
函数返回值:很多返回指针的函数,在出错或找不到请求的资源时,会返回
NULL。#include <stdlib.h> int *create_array(int size) { if (size <= 0) { return NULL; // size 无效,返回 NULL 表示失败 } int *arr = (int *)malloc(size * sizeof(int)); // ... 其他操作 ... return arr; // 成功则返回指向新数组的指针 }
time(NULL) 的组合使用
现在我们把这两个概念结合起来看。time(NULL) 是 C 语言中最常见、最标准的用法之一。
time(NULL) 的意思是:
- 调用
time()函数。 - 传入参数
NULL,告诉函数:“我不需要你把时间值存到我提供的变量里,我只需要你返回它。”
这是一种简洁的写法,当你只需要时间戳的返回值,而不需要额外的变量来存储它时,这种方式非常方便。
示例:获取时间戳并格式化
这是一个非常实用的例子,展示了如何获取当前时间戳,并将其转换成人类可读的格式。
#include <stdio.h>
#include <time.h> // 包含 time(), ctime(), time_t
int main() {
// 1. 使用 time(NULL) 获取当前时间戳
time_t rawtime;
time(&rawtime); // 这里我们使用指针参数,把时间存入 rawtime
// 或者 time_t rawtime = time(NULL); // 这样也可以
// 2. 使用 ctime() 将时间戳转换为字符串 (格式: "Wed Jun 30 21:49:08 1993\n")
char *time_str = ctime(&rawtime);
// 3. 打印结果
printf("当前时间戳 (秒数): %ld\n", rawtime);
printf("格式化后的时间: %s", time_str); // ctime 返回的字符串末尾自带换行符
return 0;
}
| 概念 | 类型 | 作用 | 示例 |
|---|---|---|---|
time |
函数 | 获取当前日历时间(从纪元开始的秒数)。 | time_t now = time(NULL); |
NULL |
宏 | 代表空指针或零值,表示“无”或“无效”。 | int *p = NULL; 或 if (p == NULL) { ... } |
核心要点:
time是一个动作(获取时间)。NULL是一个值(空指针)。time(NULL)是一个常见的调用方式,意思是“调用 time 函数,并忽略其参数传递功能,只使用它的返回值”。
