I am taking an open online course CS50 from Harvard. The last lecture I had was about memory allocation and pointers (two concepts which are absolutely new to me).
"char c[10];" reserves space either on the local stack or in a global data area that is created when the program is loaded, it is not heap memory as far as the program is concerned (to the OS it may be different).
When used in an expression an array decays to a pointer to its first element (this is how something like the following works, for example):
You cannot free an array declared with type var[size] syntax because it is either local to the current function or global to the entire program. Heap memory is not bound to any particular context in this way (the variables used to reference the heap memory are but not the pointed-to memory).