Answer is B.
A) Structures can definitely contain other structures. See chapter 6 in the book on C programming by Dennis Ritchie.
struct rect {
struct point pt1;
struct point pt2;
} ;
C) We can have structures which point to them, and we use these a lot when we create linked list. Example:-
struct Node
{
int data;
struct Node *next;
};
Here next is a pointer to structure Node.
B)But we cannot have structures which contain themselves. This will give you compile time errors. For example:-
struct regression {
int int_member;
struct regression self_member;
};
In order to compile a statement of this type, your computer would theoretically need an infinite amount of memory. In practice, however, you will simply receive an error message along the following lines:
struct5.c: In function `main':
struct5.c:8: field `self_member' has incomplete type
The compiler is telling you that self_member has been declared before its data type, regression has been fully declared -- naturally, since you're declaring self_member in the middle of declaring its own data type!
See this: https://stackoverflow.com/questions/588623/self-referential-struct-definition
and this: https://stackoverflow.com/questions/16741618/why-cant-a-struct-have-a-member-that-is-of-the-same-type-as-itself
this one too: http://www.asic-world.com/scripting/structs_c.html