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.
Code:
struct entry *s = (struct entry *)1234560;
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.
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:
Code:
struct a;
a = 0; // illegal
if (a == 0) // illegal
if (a != 0) // illegal
struct entry s = (struct entry)1234560; // illegal
Note that these are structs, not pointers to structs. Similarely, we can compare addresses:
Code:
struct a;
if (&a == 0) // ok
if (&a != 0) // ok
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.