( tetra | 2011. 11. 26., szo – 17:34 )

A tömb neve mint szimbólum automatikusan konvertálódik pointerré, de ettől még a tömb nem pointer. Ritkán jön elő, de már több helyről hallottam, hogy volt vele gondjuk. A tömb máshogy indexel, mint a pointer.
int arr[10]; //sizeof(arr) == 10*sizeof(int)
int* ptr = new int[10];

Na, ekkor
arr[n] kifejezés értelme: *(&arr + n*sizeof(int))
ptr[n] értelme: *(ptr + n*sizeof(int))

Tehát a tömb szimbólum önmagában a tömböt jelenti, nem a tömb címét. Az, hogy kussban konvertálódik pointerré, még olyan esetekben is, amikor megtévesztő, nem segít persze.
void f(int arr[])
{
sizeof(arr) == sizeof(int*) //mindegy mekkora a tömb
}

A klasszikus példa, hogy fordítási egységek között, ha az egyik helyen tömbként van definiálva, a másik helyen deklarálod mint extern pointer, akkor indexelésnél a címzést el fogja kúrni a fordítóprogram, ugyanis mint fentebb láthatod, máshogy indexeli a pointert és máshogy a tömböt. Csak előled ez el van rejtve.
----
Hülye pelikán