Kolejność adresów komórek w tablicy

0

Witam,
chciałem się zapytać, czy jeśli utworzę tablicę (dynamiczną) o N elementach tj.:

klasa* tablica = new klasa[N]; 

To czy zawsze będzie spełniony następujący warunek:

&tablica[i-1] < &tablica[i] < &tablica[i+1]

?
Tzn, czy adres do komórki o indeksie i-1 będzie zawsze mniejszy od komórki o indeksie i który zawsze będzie mniejszy od adresu komórki i+1?

Pytam, bo mam wskaźnik do elementu tablicy i w razie, gdybym chciał go zmienić muszę sprawdzić czy zmieniam na element wcześniejszy czy późniejszy w tej tablicy a nie chcę tworzyć dodatkowej zmiennej na index ;)

0

Jest dokładnie tak jak napisałeś. Pamiętaj tylko żeby w jakiś sposób oryginalny adres był odtwarzalny dla późniejszego zwolnienia i żeby nie wyjść poza zakres.

0

Musi być to prawda, bo to jest równoważne:

&tablica[i+1] == tablica+i+1
0

Czyli mogę zrobić coś takiego:

class klasa
{
klasa* next_element;
klasa* prev_element;
void set_next_element()
   {
   next_element = this+1; //lub ++this lub this++
   }
   void set_prev_element()
   {
   prev_element = this--; //lub: --this lub this-1
   }
}

klasa* tablica = new klasa[100];

for(int i=1; i<100; i++)
{
tablica[i].set_prev_element();
tablica[i-1].set_next_element();
}

Bardzo proszę o potwierdzenie i ewentualne uwagi do kodu ;)
pozdrawiam

0

Bardzo dziwny pomysł, ale możesz. Nie możesz za to robić ++ ani -- na this bo jest stałym wskaźnikiem!
Poza tym dla zwykłego człowieka znacznie bardziej czytelne byłoby ustawianie prev i next poprzez przekazanie odpowiedniego wskaźnika do metody.

0

Edit:
chociaż chyba jednak nie można używać ++this oraz --this -> bo zostanie przypisane this (?), które następnie zmieni się o 1
oraz this++ i this-- -> bo zmieni mi się adres elementu, który chcę przypisać (?) - a chodzi jedynie o przypisanie adresu kolejnego elementu...

@Shalom dziękuję bardzo za potwierdzenie! Też myślę, że wskazanie bezpośrednio adresu jest jednak lepszym rozwiązaniem ;-) Takie egzotyczne próby są tylko w ramach ćwiczeń :)
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1