#include<memory>
#include<cstring>
#include<iostream>
using namespace std;
int main() {
std::unique_ptr<std::uint64_t[]> block(new std::uint64_t[100]);
// Let's assume sizeof(float) == 4 and sizeof(double) == 8. I want to store a float and a double in block and print the value.
float* pf = reinterpret_cast<float*>(&block[0]);
double* pd = reinterpret_cast<double*>(&block[1]);
memmove(pf, &block[0], 8);
*pf = 1.1;
memmove(&block[0], pf, 8);
memmove(pd, &block[0], 8);
*pd = 2.2;
memmove(&block[0], pd, 8);
memmove(pf, &block[0], 8);
std::cout << *pf << std::endl;
memmove(&block[0], pf, 8);
memmove(pd, &block[0], 8);
std::cout << *pd << std::endl;
}
I2luY2x1ZGU8bWVtb3J5PgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnVpbnQ2NF90W10+IGJsb2NrKG5ldyBzdGQ6OnVpbnQ2NF90WzEwMF0pOwoKICAgIC8vIExldCdzIGFzc3VtZSBzaXplb2YoZmxvYXQpID09IDQgYW5kIHNpemVvZihkb3VibGUpID09IDguIEkgd2FudCB0byBzdG9yZSBhIGZsb2F0IGFuZCBhIGRvdWJsZSBpbiBibG9jayBhbmQgcHJpbnQgdGhlIHZhbHVlLgoKICAgIGZsb2F0KiBwZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmYmxvY2tbMF0pOwogICAgZG91YmxlKiBwZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oJmJsb2NrWzFdKTsKCiAgICBtZW1tb3ZlKHBmLCAmYmxvY2tbMF0sIDgpOwogICAgKnBmID0gMS4xOwogICAgbWVtbW92ZSgmYmxvY2tbMF0sIHBmLCA4KTsKCiAgICBtZW1tb3ZlKHBkLCAmYmxvY2tbMF0sIDgpOwogICAgKnBkID0gMi4yOwogICAgbWVtbW92ZSgmYmxvY2tbMF0sIHBkLCA4KTsKCiAgICBtZW1tb3ZlKHBmLCAmYmxvY2tbMF0sIDgpOwogICAgc3RkOjpjb3V0IDw8ICpwZiA8PCBzdGQ6OmVuZGw7CiAgICBtZW1tb3ZlKCZibG9ja1swXSwgcGYsIDgpOwoKICAgIG1lbW1vdmUocGQsICZibG9ja1swXSwgOCk7CiAgICBzdGQ6OmNvdXQgPDwgKnBkIDw8IHN0ZDo6ZW5kbDsKfQ==