Ahmad1797, you seem to have a number of misunderstandings on this subject.
An array is not a pointer. Section 4.2 of the standard
[*] talks about Array-to-pointer conversion, if an array was a pointer you would not need this.
Section 8.3.4 basically says that a declaration T D where D has the form D[constant-expression
opt] is an
array type (again not a pointer type).
When you use the name of an array it is converted to a pointer to the first element of the array.
sizeof() : When applied to a reference type, the result is the size of the referenced type
i.e. when applied to POINTER which is referenced DIRECTLY |
Here, a pointer is NOT a reference type it is a pointer type.
You, like a lot of people, are getting confused with it being a reference and it referencing something.
======================================
[*] ISO/IEC 14882:2003 (the one I have to hand)