Type Punning, part 2
In last session, we converted double
to int
, now we will extend on this with a struct implementation.
Here is what it would look like:
#include <iostream>
struct Vector
{
int a, b;
};
void printMem(void *location)
{
unsigned char const *pos = (unsigned char const *)location;
for (int i = 0; i < 20; i++) {
printf("|%2.2x| ", pos[i]);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
Vector v = {1 ,2};
printMem(&v);
int* v2 = (int*) &v;
std::cout << "a: " << v2[0] << ", b: " << v2[1] << std::endl;
return 0;
}
Try it here.
// Output
|01| |00| |00| |00| |02| |00| |00| |00| |00| |26| |87| |5e| |29| |fe| |f1| |3b| |00| |00| |00| |00|
a: 1, b: 2
Let's see how it works:
We have a structs,
Vector
.Vector
contains 2 integersa
andb
.If we look at its memory allocation, it would be similar to an array with two int.
It means, we can read this struct as an array with indexes.
Hence, if we get pointer to
a
in struct, we can index on it to read value ofb
from its memory.
Last updated