[C++] wyświatlanie elementu tablicy dynamicznej

Hebo
Użytkownik
Użytkownik
Posty: 245
Rejestracja: 19 lis 2009, o 19:31
Płeć: Mężczyzna
Lokalizacja: Małopolskie
Podziękował: 28 razy
Pomógł: 9 razy

[C++] wyświatlanie elementu tablicy dynamicznej

Post autor: Hebo »

mam kod:

Kod: Zaznacz cały

int *A[10];
    
    A[1] = new int;
    *A[1] = 6;
    
dlaczego aby wyświetlić element A[1] należy zrobić tak:

Kod: Zaznacz cały

int *A[10];
    
    A[1] = new int;
    *A[1] = 6;
    
    cout << **(A+1) << endl; // albo tak:
    cout << *A[1] << endl;
    
w czym jest różnica i jak to wytłumaczyć? (głównie mnie zastanawia pierwsza opcja), bardzo chciałbym to zrozumieć

Pozdrawiam
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C++] wyświatlanie elementu tablicy dynamicznej

Post autor: Althorion »

Pierwsza linijka tworzy dziesięcioelementową tablicę wskaźników do intów. Jest to tablica statyczna, nie dynamiczna jak piszesz — jej rozmiar jest znany w końcu już na etapie kompilacji.

Tablice w C(++) mają tę cechę, że ich nazwa to jednocześnie wskaźnik do pierwszego elementu (tego pod numerem 0, jako że od zera są tablice numerowane). Tak więc w szóstej linijce odpytujesz o element wskazywany przez element o jeden dalej niż pierwszy element tablicy (czyli z drugiego). Linia siódma to wyłuskanie elementu wskazywanego przez wskaźnik z drugiej komórki. Oba te kody są równoważne (powinny generować taki sam kod ASM).
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] wyświatlanie elementu tablicy dynamicznej

Post autor: Ser Cubus »

Kod: Zaznacz cały

A[1]
to jest to samo co

Kod: Zaznacz cały

*(A+1)
, wytłumaczenie dlaczego tak jest napisał kolega powyżej
ODPOWIEDZ