我正在尝试理解我提供的框架并慢慢调试它。在我的例子中,我有一个 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/