So I\'m writing a program to test the endianess of a machine and print it. I understand the difference between little and big endian, however, from what I\'ve found online,
If we split into different parts:
&x: This gets the address of the location where the variable x is, i.e. &x is a pointer to x. The type is int *.
(char *)&x: This takes the address of x (which is a int *) and converts it to a char *.
*(char *)&x: This dereferences the char * pointed to by &x, i.e. gets the values stored in x.
Now if we go back to x and how the data is stored. On most machines, x is four bytes. Storing 1 in x sets the least significant bit to 1 and the rest to 0. On a little-endian machine this is stored in memory as 0x01 0x00 0x00 0x00, while on a big-endian machine it's stored as 0x00 0x00 0x00 0x01.
What the expression does is get the first of those bytes and check if it's 1 or not.