Home >Backend Development >C++ >Why Do `t`, `&t[0]`, and a Pointer to `t` Have the Same Address?
Why t, &t[0], and t Converted to a Pointer Have the Same Address
An array is a contiguous block of memory containing elements of the same data type. When you declare an array, the compiler allocates a block of memory and creates pointers to each element within that block.
Case 1: t and &t[0]
When you use t on its own (without any subscripts), it undergoes an array-to-pointer conversion, which generates a pointer to the first element of the array. This behavior is equivalent to using &t[0], which explicitly returns the address of the first element. Hence, t and &t[0] have the same value.
Case 2: &t
However, when you apply the & operator to t, it doesn't trigger the array-to-pointer conversion. Instead, &t directly takes the address of t itself, resulting in a pointer to the entire array.
In memory, the first element of the array and the start of the array reside at the same location. Therefore, the pointers t, &t[0], and u (which is a pointer to t) all have the same address.
Output Explanation:
The given code demonstrates this behavior:
int t[10]; int * u = t; cout << t << " " << &t << endl; cout << u << " " << &u << endl;
Output:
0045FB88 0045FB88 0045FB88 0045FB7C
The output shows that t, &t[0], and u have the same value (0045FB88), confirming their equivalence as pointers.
The above is the detailed content of Why Do `t`, `&t[0]`, and a Pointer to `t` Have the Same Address?. For more information, please follow other related articles on the PHP Chinese website!