Just explaining what gerard4143 said in simple words.
First usage is allowed as what ever usage of pointer you make its still remains a pointer and takes up a standard amount of memory which is normally equal to the size of your integer variable.So it can be defined without any confusions.
In the second usage you are including a variable of the same structure type inside the structure. Now here in order to declare a variable of some data type you need to know how that data type is defined and the data type cannot be unambigiously defined until the compiler knows what all the variables within that structure.So one waits for other and no one gets completed.
But this is allowed
struct A varA;
As the definition of A knows how char and int are defined and their memory needs and before structure B is defined the compiler knows how structure A is defined.