You can't set a structure to an integer, but you can set a pointer to a structure to 0. Pointers are addresses of the thing-pointed-to, so you can set them to any numerical value.
is legal C. In some situations (e.g. programming on an embedded device) it's useful to be able to create pointers to any memory location, to access memory mapped peripherals.
struct entry *s = (struct entry *)1234560;
However running under an OS (which controls what memory the program can use) dereferencing the pointer is unlikely to do anything other than crash the program.
Now, these are illegal C:
Note that these are structs, not pointers to structs. Similarely, we can compare addresses:
a = 0; // illegal
if (a == 0) // illegal
if (a != 0) // illegal
struct entry s = (struct entry)1234560; // illegal
It's quite common to write 0 in a pointer context as "NULL". NULL is exactly the same as 0, but helps to make it clear that it is in context of a pointer.
if (&a == 0) // ok
if (&a != 0) // ok