Tablica dwuwymiarowa nie rozpada się na wskaźnik do wskaźnika na ints. Rozpada się na wskaźnik do tablic int - to znaczy, że tylko pierwszy wymiar rozpada się na wskaźnik. Wskaźnik nie wskazuje na wskaźniki int, które po inkrementacji przesuwają się o wielkość wskaźnika, ale do tablic z 5 liczbami całkowitymi.
class Myclass {
private:
int myarray[5][5];
public:
typedef int (*pointer_to_arrays)[5]; //typedefs can make things more readable with such awkward types
pointer_to_arrays get_array() {return myarray;}
};
int main()
{
Myclass o;
int (*a)[5] = o.get_array();
//or
Myclass::pointer_to_arrays b = o.get_array();
}
wskaźnik do wskaźnika (int**
) stosuje się, gdy każdy subarray przeznaczono oddzielnie (to znaczy, że pierwotnie miał tablicę wskaźników)
int* p[5];
for (int i = 0; i != 5; ++i) {
p[i] = new int[5];
}
Tutaj mamy tablicę pięciu wskaźników, każdy wskazuje na pierwszy element w osobnym bloku pamięci, łącznie 6 różnych bloków pamięci.
W dwuwymiarowej tablicy można uzyskać pojedynczy ciągły blok pamięci:
int arr[5][5]; //a single block of 5 * 5 * sizeof(int) bytes
Należy zauważyć, że układ pamięci te rzeczy są zupełnie inne, a więc te rzeczy nie mogą być zwrócone i przeszedł ta sama droga.
co to jest siatka? czy nie powinno to być 'myarray'? – woodstok
Zwrot bezpośredni do prywatnego członka nie zawsze jest dobrym pomysłem - skutecznie przełamujesz hermetyzację, umożliwiając każdemu dostęp i modyfikowanie Twojego prywatnego członka. To może, ale nie musi być dopuszczalne w twoim projekcie. –
@MIkhail: Ponieważ Justin nie był online od momentu, w którym opublikował to pytanie, skorzystałem z prawa, aby to naprawić. – sbi