Witam, uczę się języka C z książki "Język C - szkoła programowania" S Praty i mam malutki problem ze wskaźnikami.
Jestem aktualnie na "Wskaźnikach do tablic wielowymiarowych" i mam problem z deklaracją takich wskaźników. W książce jest napisane, że żeby zadeklarować zmienną wskaźnikową, która byłaby zgodna z np. tablicą dwuwymiarową, nie wystarczy wskaźnik do int, gdyż ten typ jest zgodny tylko ze zmienną, która wskazuje pojedynczą wartość int - zmienna wskaźnikowa powinna wskazywać na całą tablice takich wartości. Potem jest przykład deklaracji takiej zmiennej:
int (*wz)[2]; // wz wskazuje do tablicy dwoch elementow typu int
Niby wszystko jasne - powyższa instrukcja tworzy jeden wskaźnik do tablicy składającej się z dwóch liczb typu int. Jednak potem jest przedstawiony przykładowy program, w którym można zobaczyć takie oto instrukcje (przepiszę skróconą wersje programu):
#include <stdio.h>
#include <stdlib.h>
int main()
{
int zippo[4][2] = { {2,4}, {6,8}, {1,3}, {5,7} };
int (*pz)[2]; //deklaracja wskaznika do tablicy wielowymiarowej
pz = zippo; //przypisanie adresu pierwszego elementu tablicy wielowymiarowej,
//gdyz sama nazwa tablicy jest jednoczesnie adresem jej pierwszego elementu
printf("*(*(pz+2)+1) = %d\n", *(*(pz+2)+1) );
printf("pz[2][1] = %d\n", pz[2][1]);
return 0;
}
Może mi ktoś wytłumaczyć, dlaczego w deklaracji wskaźnika do tablicy dwuwymiarowej mamy int (pz)[2]; , a nie np int(pz)[4][2], skoro jest to wskaźnik do tablicy [4][2]?
W powyższym przypadku napisaliśmy (pz)[2] - 2, ponieważ jest to tablica dwuwymiarowa? Czyli w przypadku tablicy trzy wymiarowej int zippo[4][6][2]; musielibyśmy napisać int (pz)[3]?
Może mi ktoś wytłumaczyć, na jakiej zasadzie deklaruje się wskaźniki do tablic wielowymiarowych? I jak by wyglądała deklaracja takiego wskaźnika dla np. takich tablic:
int zippo2[4][6][2];
int zippo3[2][4][6][8];