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: 2Let's see how it works:
We have a structs,
Vector.Vectorcontains 2 integersaandb.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
ain struct, we can index on it to read value ofbfrom its memory.
Last updated