ADT实现多种数据类型之使用void *的疑问

u014541584 2014-04-10 02:50:33
比如想要一个整形堆栈和浮点型堆栈,有一种方法是将堆栈类型声明为void *,它将整形或其他类型转换为一个指针值。
那会不会造成精度损失?因为double型的话比指针型需要的空间多吧?
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2014-04-10
  • 打赏
  • 举报
回复
引用 6 楼 u014541584 的回复:
[quote=引用 5 楼 supermegaboy 的回复:] [quote=引用 3 楼 u014541584 的回复:] 况且联合很有局限性,没void *自由灵活
错误。用void*存在类型转换,而除了普通指针到void*等少数情况外,C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了,用void*存在安全隐患。 联合没有这样的问题。[/quote] 但是adt是无法访问函数实现细节的,所以联合不行[/quote] 无论联合也好,void*也好,栈的底层结构都是被封装起来的,用户本来就不需要知道细节,这是ADT的本来目的。你应该是不熟悉作为联合如何实现栈,以为需要访问细节。
u014541584 2014-04-10
  • 打赏
  • 举报
回复
引用 5 楼 supermegaboy 的回复:
[quote=引用 3 楼 u014541584 的回复:] 况且联合很有局限性,没void *自由灵活
错误。用void*存在类型转换,而除了普通指针到void*等少数情况外,C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了,用void*存在安全隐患。 联合没有这样的问题。[/quote] 但是adt是无法访问函数实现细节的,所以联合不行
飞天御剑流 2014-04-10
  • 打赏
  • 举报
回复
引用 3 楼 u014541584 的回复:
况且联合很有局限性,没void *自由灵活
错误。用void*存在类型转换,而除了普通指针到void*等少数情况外,C/C++是不保证转换到void*后再转换回原来的类型仍能保证其值不变。说白了,用void*存在安全隐患。 联合没有这样的问题。
u014541584 2014-04-10
  • 打赏
  • 举报
回复
说错了,是无法用联合
u014541584 2014-04-10
  • 打赏
  • 举报
回复
况且联合很有局限性,没void *自由灵活
u014541584 2014-04-10
  • 打赏
  • 举报
回复
引用 1 楼 supermegaboy 的回复:
这个方法不好,用联合更好。
我知道不好,但也要讨论下,就事而论吧
飞天御剑流 2014-04-10
  • 打赏
  • 举报
回复
这个方法不好,用联合更好。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧