📅  最后修改于: 2023-12-03 14:39:41.567000             🧑  作者: Mango
在 C 和 C++ 中,void*
指向一个未指定类型的内存位置。它是一个通用指针,可以转换为任何类型的指针类型。但是,在 C 和 C++ 中,void*
存在一些不同之处。
C
中的 void*
在 C 中,void*
是一种通用类型,可以用于指向任何类型的数据,但是,指针算术运算是被禁止的。这是因为 void*
不能被解引用,因为编译器无法确定正确的类型。因此,不能对 void*
执行算术运算。如果需要执行指针加法/减法等操作,需要先将 void*
转换为未指定类型的指针(如 int*
、float*
等)。
void* ptr = malloc(sizeof(int) * 5);
int* iptr = (int*)ptr;
float* fptr = (float*)ptr;
C++
中的 void*
在 C++ 中,void*
也是一种通用类型,可以用于指向任何类型的数据。与 C 不同的是,C++ 允许在 void*
上执行指针算术运算,但是,对 void*
执行解引用操作是不允许的。
void* ptr = malloc(sizeof(int) * 5);
int* iptr = static_cast<int*>(ptr);
float* fptr = static_cast<float*>(ptr);
在 C 中,void*
指针不能被解引用,不能执行指针算术运算。因此,需要将 void*
指针转换为未指定类型的指针,然后才能执行算术运算。在 C++ 中,void*
指针可以执行算术运算,但是不能被解引用。无论在 C 还是 C++ 中,使用 void*
都需要小心处理,避免出现类型转换错误和指针溢出等问题。