我想了解一个框架,我已经提供并慢慢调试它。在我来说,我有VEC的数组,指针记忆:铸造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 * 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;
我意识到,试图指向第一个VEC,这是boh1,所以如果我去调试,我看到了X,Y,Z值设置为1.同样,try2应指向与boh1相关的“某些内容”,但调试显示try2的值为1.000000。那么,究竟发生了什么?
编辑:“try”不能用作C++中变量的名称。
我不推荐在C++中使用'try'作为变量名称。 –
@PaulR是别担心..我只是懒编辑文本。我现在要做,以避免误解。 – Tarta