QQ said:
For instance I have a struct
struct A{
char ID[10];
}A;
when I call the ID in struct A
A aa;
is &aa.ID[0] and aa.ID
the same?
Formally speaking, no. One example where thse two behave differently was already
mentioned by Richard.
Also one can note that the former is an lvalue, while the latter is an rvalue.
There are contexts where this will make a difference. For example, you can apply
an 'address-of' operator to 'aa.ID' and get the pointer to the entire array
(pointer of type 'char (*)[10]')
char (*ptr)[10 = &aa.ID;
However, it is worth mentioning that in virtually all other contexts these two
variants will behave identically.