c++中把void*转为可以通过下标访问的数组
时间: 2023-11-27 10:03:58 浏览: 60
C#访问C++动态分配的数组指针(实例讲解)
在 C++ 中,可以通过以下方式将 void 指针转换为可以通过下标访问的数组:
```cpp
void* my_void_ptr = /* ... */;
// 将 void 指针转换为 char 指针,这样可以通过指针访问内存中的数据
char* my_char_ptr = static_cast<char*>(my_void_ptr);
// 将 char 指针转换为任意类型的指针,这样可以使用下标访问数组
int* my_int_array = reinterpret_cast<int*>(my_char_ptr);
```
这里使用了两种类型转换:`static_cast` 和 `reinterpret_cast`。
`static_cast` 是一种安全的类型转换,用于转换类型之间存在继承关系的指针或引用,或者用于转换数值类型之间的值。在上述代码中,我们将 `void*` 指针转换为 `char*` 指针,这是安全的,因为 `char` 类型的指针可以指向任何类型的数据,而且 `char` 类型的指针可以通过指针运算访问内存中的数据。
`reinterpret_cast` 是一种危险的类型转换,用于将指针或引用转换为其它类型的指针或引用。在上述代码中,我们将 `char*` 指针强制转换为 `int*` 指针,这是危险的,因为这个指针实际上指向的是一段 `char` 类型的数据,而不是 `int` 类型的数据。但是,由于我们知道这些 `char` 数据实际上是一组 `int` 类型的数据,所以可以使用 `reinterpret_cast` 进行类型转换。但是,需要非常小心,确保不会访问到不属于该数组的内存区域,否则会导致未定义的行为。
阅读全文