Does the C++ compiler treat the arrays same way as in C?
E.g
In C,
- An array access using subscript
operator is always interpreted as a
pointer. - In function argument, array declarations
are treated as pointer to
start of element.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Yes and no. Arrays work the same in both languages for the most part (C99 supports variable-length arrays, while C++ doesn’t, and there may be a few other subtle differnces as well).
However, what you’re saying isn’t exactly true either. The compiler doesn’t treat an array access as a pointer, not even in C. An array access can be more efficient in some cases, because the compiler has better information on aliasing available in the array case. In both C and C++, a plain pointer access means that the compiler has to assume that it may alias any other compatible type. If the compiler simply treated it as a pointer dereference, then this optimization opportunity would be lost.
Edit
As pointed out in a comment, the language standard does define array subscripting in terms of pointer arithmetics/dereferencing. Of course, actual compilers make use of the additional information that a pointer is really an array, so they’re not treated exactly like pointers, but that could be considered an optimization beyond what the standard mandates.