I have seen in many posts that \"in most of the cases array names decay into pointers\".
Can I know in what cases/expressions the array name doesn\'t decay into a pointer
Sure.
In C99 there are three fundamental cases, namely:
when it's the argument of the & (address-of) operator.
when it's the argument of the sizeof operator.
When it's a string literal of type char [N + 1] or a wide string literal of type wchar_t [N + 1] (N is the length of the string) which is used to initialize an array, as in char str[] = "foo"; or wchar_t wstr[] = L"foo";.
Furthermore, in C11, the newly introduced alignof operator doesn't let its array argument decay into a pointer either.
In C++, there are additional rules, for example, when it's passed by reference.