📜  C 和 C++ 中的“void*”有何不同?(1)

📅  最后修改于: 2023-12-03 14:39:41.567000             🧑  作者: Mango

C 和 C++ 中的“void*”有何不同?

在 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* 都需要小心处理,避免出现类型转换错误和指针溢出等问题。