![](/img/trans.png)
[英]c++ what is “pointer = new type” as opposed to “pointer = new type []”?
[英]C++ what happen if I convert pointer type?
当我们分配一块内存时,比如:
double* ptr = new double[10];
它给了我一个指向 double 的 10 个连续内存位置的第一个位置的指针
现在,如果我这样做:
unsigned char* ptr2 = (unsigned char*)ptr;
它是否会创建另一个指向 ptr 的第一个位置的 unsigned char 指针,然后将数组转换为 unsigned char(其大小不再是 10)?
如果没有,该怎么做?
指针类型(type *)ptr
的 C 风格转换对位模式完全没有任何作用。 它只是告诉编译器将指针视为新类型。 在大多数情况下使用结果相当危险的东西只是 UB。
现在 char 是一种特殊情况,因为它用于访问任何数据的原始内存。 因此,您可以将任何指针(不是函数或成员指针)转换为 char 指针,并使用它来访问数据的位模式。 您还可以安全地将 char 指针转换回原始类型。 几乎所有其他东西都很快变成了UB。
查看 C++ 风格转换以获得更好和更安全的方法:const_cast、static_cast、dynamic_cast、reinterpret_cast、.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.