c++ - 将 Vec* 转换为 double*

标签 c++ arrays casting

我正在尝试理解我提供的框架并慢慢调试它。在我的例子中,我有一个 Vec 数组,用指针记住:

Vec *cx =....;

我的 Vec 是一个结构体,定义如下:

struct Vec {
    double x, y, z;                  // position, also color (r,g,b)
    Vec(double x_ = 0, double y_ = 0, double z_ = 0){ x = x_; y = y_; z = z_; }
    Vec operator+(const Vec &b) const { return Vec(x + b.x, y + b.y, z + b.z); }
    Vec operator-(const Vec &b) const { return Vec(x - b.x, y - b.y, z - b.z); }
    Vec operator-() const { return Vec(-x, -y, -z); }
    Vec operator*(double b) const { return Vec(x*b, y*b, z*b); }
    Vec mult(const Vec &b) const { return Vec(x*b.x, y*b.y, z*b.z); }
    Vec& norm(){ return *this = *this * (1 / sqrtf(x*x + y*y + z*z)); }
    double dot(const Vec &b) const { return x*b.x + y*b.y + z*b.z; } // cross:
    Vec operator%(Vec&b){ return Vec(y*b.z - z*b.y, z*b.x - x*b.z, x*b.y - y*b.x); }
    double max() const { return x>y && x>z ? x : y > z ? y : z; }
};

我想知道如果我将一个 Vec 数组转换为一个 double 组,实际会发生什么。在实践中:

double * cast = (double*)cx;

它给我带来了什么?

为了便于理解,我尝试这样做:

Vec boh = Vec(1.0, 1.0, 1.0);
Vec boh2 = Vec(2.0, 2.0, 2.0);
Vec * try = new Vec[2];
try[0] = boh;
try[1] = boh2;
double* try2= (double*)try;

我意识到 try 指向第一个 Vec,即 boh1,所以如果我进行调试,我会看到 x、y、z 值设置为 1。同样,try2 应该指向与 boh1 相关的“某物”,但是调试显示 try2 的值​​为 1.000000。那么,实际发生了什么?

编辑:“try”不能用作 C++ 中的变量名。

最佳答案

它仍然会给你一个指向 Vec 的指针,它根本不是一个 double。转换所做的是告诉编译器完全忽略 try 的实际类型,有效地假装 try 不是它。

使用 try2 将导致未定义的行为

关于c++ - 将 Vec* 转换为 double*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33123105/

相关文章:

java - 避免在 Java 中进行动态转换

go - go中的二维 slice 类型转换

c++ - 如何从我的自定义类继承

arrays - Excel VBA : Replicating Index(Match()) between several arrays

php - 对于这种 PHP 按值调用行为有合理的解释吗?还是 PHP 的错误?

c++ - 你如何在 C++ 中为二维数组分配内存

php - 转换为数组 VS is_array()

c++ - 为什么 cin.get 只等待用户输入一次

c++ - 错误 :cannot convert 'std::complex<double>' to '__complex__ float' in initialization

c++ - 调试注释和 C/C++ 宏