1. void *表示一个“不知道类型”的指针,也就不知道 从这个指针地址开始 多少字节 为一个数据。
2. 因此void*只能表示一个地址,不能用来&,也不能+ -移动指针,因为不知道多少字节是一个数据单位。 要想移动 void* 类型的指针,就必须强制类型转换为其他指针。
3. 对指针变量的解引用,使用间接运算符*达到目的。但是在使用空指针的情况下,需要转换指针变量以解引用。这是因为空指针没有与之关联的数据类型。编译器无法知道void指针指向的数据类型。
举个简单例子
void* my_memcpy(void* dest, const void* src, size_t num)
{
*(char*)dest = *(char*)src;
//这里解引用,进行了强制类型转换,转换成了 char*
dest = (char*)dest + 1;
src = (char*)src + 1;
//这里移动,也需要进行强制类型转换
...
...
...
}
版权声明:本文为m0_73292466原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。