标题:标准库的 char *ctime(const time_t *) 函数,这里参数为什么要传指针呢?
只看楼主
leotol
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2022-3-4
结帖率:100%
已结贴  问题点数:20 回复次数:3 
标准库的 char *ctime(const time_t *) 函数,这里参数为什么要传指针呢?
这里参数要求传指针(const time_t * ),这是出于什么考虑呢?
由于在函数内部不会修改实参的值,直接传值 time_t(long) 不是更直观吗,为什么作者不这么设计呢?
新手求大佬解惑,
搜索更多相关主题的帖子: 参数 函数 ctime const 指针 
2022-03-04 11:22
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:20 
个人觉得,这涉及一个性能问题,或是底层实现的问题。如果传指针,这个很容易做到。time_t这个对库的使用者来说确实是一个类型,但使用者并不知道这个类型是怎么实现的。如果这个类型被实现成一个较为复杂的结构体,是不是有性能问题?

同样的问题还有errno,这东西甚至是实现成对指针的解引用的结果,用的时候一定要想想可不可以按照你的想法使用。

extern int *__errno_location (void) __THROW __attribute_const__;
# define errno (*__errno_location ())


这就是GNU实现的errno。

你以为的你以为,不一定就是真的。

[此贴子已经被作者于2022-3-4 20:59编辑过]

2022-03-04 20:57
leotol
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2022-3-4
得分:0 
回复 2楼 八画小子
哦哦,我大概懂了,感谢回答。
针对这种情况,传指针的确比传值有更大的性能优势,比如在16位设备上,指针变量占用2字节,time_t(long) 变量占用 4 字节。
2022-03-06 16:22
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:705
专家分:2043
注 册:2010-11-11
得分:0 
以下是引用leotol在2022-3-6 16:22:59的发言:

哦哦,我大概懂了,感谢回答。
针对这种情况,传指针的确比传值有更大的性能优势,比如在16位设备上,指针变量占用2字节,time_t(long) 变量占用 4 字节。

不要总想着time_t是4字节,也有可能是更大的。我说的性能问题,不是2字节之差的问题。
传递指针一定通常是保存在寄存器(CPU)中;但直接传递结构体的话,会把这个结构体复制一份到内存中。你觉得哪种更快一些?
函数参数中传递结构体,涉及到内存的复制问题。比如,一个结构体的大小是100字节,你觉得是传递结构体本身好,还是指向结构体的指针更好?
2022-03-06 23:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508464-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.604441 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved