我知道,我们有不同的指针一样int
,float
和char
.一个void
指针是可以容纳所有其他的唯一指针.
其他指针是否存在只是为了灵活地进行指针运算?
除了void
C语言之外的其他指针还有其他原因吗?
类型安全.定义指针类型有助于编译器在尝试通过指针使用错误类型的数据时发现错误.这就是C首先出现类型的原因.
编译器需要知道指向的类型,否则各种代码将无法工作.考虑以下:
*a = *b + *c; // Should this add char? int? float? s_ptr->x = 0; // How does the compiler know anything about the structure s_ptr points to? a[5] = 0; // How far is a[5] from a[0]?
没有指针类型就像没有任何类型的东西.编译器将完全丢失.简而言之,C和C++都是强类型的,并且由于相当明显的原因而延续了指针.
int o = 12; void *i = &o;
i
如果只有void指针而没有int*,你将如何访问指向int的int.您可能知道在您的平台上,int是4个字节,因此您可以从void*指向的任何内容开始记忆4个字节到临时int,然后使用它.但那不是很方便.
或给出一个
struct Pair { char *first; char *second; };
对结构对的void指针有多大用处?您可能想要访问其first
成员,如果您没有指向结构对的指针,那么这将是很多工作.