In both C and C++, an array can be used as if it were a pointer to its first element. Effectively, given an array named x
, you can replace most uses of &x[0]
with just x
.
This is how subscripting is able to be used with array objects:
int x[5];
x[2]; // this is the same as (&x[0])[2]
This is also how an array can be passed to a function that has a parameter of pointer type:
void f(int* p);
int x[5];
f(x); // this is the same as f(&x[0])
There are several contexts in which the array-to-pointer conversion does not take place. Examples include when an array is the operand of sizeof
or the unary-&
(the address-of operator), when a string literal is used to initialize an array, and when an array is bound to a reference to an array.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…