C是否void*以编译器优化等形式提供了一些好处,或者它只是一个惯用的等价物char*?也就是说,如果void*C标准库中的每一个都被替换char*,那么除了代码易读性之外还会有任何损坏吗?
在原始的K&R C中没有void *类型,char *被用作通用指针.
void * 有两个主要目的:
当指针被用作通用指针时,它就清楚了.以前,您无法判断是否将char *其用作指向实际字符缓冲区的指针或作为通用指针.
它允许编译器捕获您尝试取消引用或对泛型指针执行算术的错误,而不是先将其转换为适当的类型.void *值不允许这些操作.不幸的是,一些编译器(例如gcc)void *默认允许对指针进行算术运算,因此它不像它那样安全.