解釋array與pointer關係
The name of an array usually evaluates to the address of the first element of the array, so array
and &array
have
the same value (but different types, so array+1
and &array+1
will not be
equal if the array is more than 1 element long).
There are two exceptions to this: when the array name is an operand of sizeof
&
(address-of),
the name refers to the array object itself. Thus sizeof
array
gives you the size in bytes of the entire array, not the size of a pointer.
For an array defined as T
array[size]
, it will have type T
*
. When/if you increment it, you get to the next element in the array.
&array
evaluates
to the same address, but given the same definition, it creates a pointer of the type T(*)[size]
--
i.e., it's a pointer to an array, not to a single element. If you increment this pointer, it'll add the size of the entire array, not the size of a single element. For example, with code like this:
char array[16];
printf("%p\t%p",(void*)&array,(void*)(&array+1));
We can expect the second pointer to be 16 greater than the first (because it's an array of 16 char's). Since %p typically converts pointers in hexadecimal, it might look something like:
0x123410000x12341010