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-expressionopt
] 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)