在返回的指针上写一个更大的对象

时间:2015-04-02 14:50:33

标签: c++ visual-studio-2013

给定一个返回指向float的指针的函数:

float* getFloatPointer();

如何编写一个不是float的对象,并且对返回的指针更大?例如包含3个浮点数的Color类。等同于此的东西:

*getFloatPointer() = cast<float[3]>(Color); // Write 3 floats starting at position of returned pointer

我知道这通常可能是不安全的,我可以进行多次函数调用,一次设置一个浮点值,这对我来说很好。经过深思熟虑后,我大多只是好奇。

1 个答案:

答案 0 :(得分:0)

这个例子说明了你在想什么:

#include <iostream>

struct Color
{
    float r;
    float g;
    float b;
};

float array[3];

int main() {
    float* p = array;
    Color* cp = reinterpret_cast<Color*>(p);

    Color c = {1.0f, 0.5f, 0.25f};
    *cp = c;

    std::cout << p[0] << ' ' << p[1] << ' ' << p[2] << std::endl;
}

我们将返回的float*重新解释为Color*,然后分配给它指向的对象。它对我有用,但可能不适合你。

当然,这是在未定义的行为领域,因为它完全取决于float数组和Color结构的布局。基本上,只要你使用reinterpret_cast,你就会告诉编译器要相信你已经完全理解了它将产生的机器代码以及它将被执行的环境。你在说&#34相信我,我们可以将此float*视为Color*。&#34;