【发布时间】:2018-01-06 00:20:25
【问题描述】:
C 的void* 是否以编译器优化等形式提供了一些好处,或者它只是char* 的惯用等价物? IE。如果 C 标准库中的每一个 void* 都被 char* 替换,除了代码的易读性之外会不会有任何损坏?
【问题讨论】:
-
void* 用于未知类型,如果您正在获取输入或通过不同类型的随机列表进行排序,则可以使用。
-
您说您希望您的语言“没有任何类型别名”,但您打算将任意指针投射到
uint8*? -
void *对于像memcpy和malloc这样的函数很有用,这些函数处理内存而不关心内存中存储的内容。 -
malloc的类型签名在您的语言中会是什么样子? (你的语言支持泛型/模板吗?) -
void*是后来引入 C 语言的 generic 指针类型。事实上,K&R C确实为此目的使用了char*。主要缺点是你不能声明一个真正接受字符指针而不是其他任何东西的函数,因为它已经用于任何通用函数。例如。strcmp可能会占用原始存储空间。
标签: c void-pointers