| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 784 人关注过本帖
标题:标准库的 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
帖 子:709
专家分:2063
注 册: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
帖 子:709
专家分:2063
注 册: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
快速回复:标准库的 char *ctime(const time_t *) 函数,这里参数为什么要传指针 ...
数据加载中...
 
   



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

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