To su sve pointeri.
Možeš imati pointer na pointer, pa i pointer na pointer na pointer na pointer ako baš želiš. Samo dodaješ zvijezdice :D
Ono što ne možeš samo tako saznati jest veličina onoga na što pointer pokazuje (tu jednostavno trebaš upotrijebiti logiku i razmisliti, a možda možeš nešto i zaključiti iz imena varijable).
Npr.
int *p može pokazivati na jedan komad memorije (polje), ali ne možeš znati o kolikom se komadu radi. Možda pokazivač pokazuje na samo jedan integer (pa to onda u biti i nije polje), a možda pokazuje na polje od 20 integera, ili čak 10000.
Isto tako, ako imaš int **p možda 'p' pokazuje na pokazivač koji pokazuje na samo jedan integer,
možda pokazuje na pokazivač koji pokazuje na više integera (polje),
možda 'p' pokazuje na polje pokazivača od kojih svaki pokazuje na jedan integer,
a možda 'p' pokazuje na polje pokazivača od kojih svaki pokazuje na polje integera.
Kada pogledaš dokumentaciju za D3DXCreateTextureFromFile vidiš da u opisu zadnjeg argumenta stoji:
Address of a pointer to an IDirect3DTexture9 interface, representing the created texture object.
Da, i pokazivači kao i sve ostale varijable imaju svoju memorijsku adresu (i oni se na kraju krajeva nalaze negdje u memoriji). Ta funkcija kao posljednji argument želi adresu pokazivača, odnosno pokazivač na pokazivač.