繁体   English   中英

如果我转换指针类型,C++ 会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM