gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:48:02 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com