|
|
好的,我来详细讲解 `time` 函数的原型和用法。
**time 函数原型:**
在 time.h 头文件中声明:
- time_t time(time_t *timer);
复制代码
**参数说明:**
- `time_t *timer`:一个指向 `time_t` 类型的指针,用于存储时间值。通常传入 `NULL`。
**返回值:**
- 返回当前日历时间(从1970年1月1日00:00:00 UTC到现在的秒数)。
**最常见用法:**
1. 给 srand() 提供种子,让随机数每次运行都不同:
- srand((unsigned)time(NULL));
复制代码
2. 获取当前时间戳(秒数):
- time_t now = time(NULL);
- printf("当前时间戳:%ld\n", (long)now);
复制代码
**详细示例:**
- #include <stdio.h>
- #include <time.h> // 包含 time() 函数
- int main() {
- // 用法1:获取时间戳(两种方式等价)
- time_t t1 = time(NULL); // 常用方式
- time_t t2;
- time(&t2); // 另一种方式
-
- printf("t1 = %ld\n", (long)t1);
- printf("t2 = %ld\n", (long)t2);
-
- // 用法2:计算时间差(简单示例)
- time_t start = time(NULL);
- for(int i = 0; i < 1000000; i++) { /* 空循环 */ }
- time_t end = time(NULL);
- printf("循环耗时:%ld 秒\n", (long)(end - start));
-
- // 用法3:将时间戳转换为可读字符串
- time_t now = time(NULL);
- char* str_time = ctime(&now); // ctime将时间戳转为字符串
- printf("当前时间:%s", str_time);
-
- return 0;
- }
复制代码
**为什么用 time(NULL) 当种子?**
因为 time(NULL) 返回的是从1970年1月1日到现在的秒数,每时每刻都在变化,所以每次运行程序种子都不同,随机序列也就不同。
**重要提示:**
1. `time_t` 通常是长整型(long),但具体类型由系统决定
2. 强制转换为 `(unsigned int)` 是因为 srand() 需要无符号整数参数
3. `time(NULL)` 和 `time(&t)` 功能相同,只是后者把值也存到变量 t 里
**典型用法组合(随机数):**
- #include <stdio.h>
- #include <stdlib.h> // rand(), srand()
- #include <time.h> // time()
- int main() {
- // 设置随机种子(只需一次)
- srand((unsigned)time(NULL));
-
- // 生成随机数
- for(int i = 0; i < 10; i++) {
- printf("%d ", rand() % 100);
- }
-
- return 0;
- }
复制代码
这样,每次运行程序都会得到不同的随机数序列。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|