Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] deklaracja tablicy jako wskaźnik

kosmonauta80 15 Mar 2019 10:46 114 2
  • #1 15 Mar 2019 10:46
    kosmonauta80
    Poziom 7  

    Dlaczego deklarując tablicę jako wskaźnik, nie mogę odwołać się do i-tego elementu tablicy tak, jak w przypadku zmiennych?

    Code:
    int *w = new int;
    cout << w wyświetli adres jako hex, a cout << *w wyświetli to, co jest pod tym adresem

    Code:
    int *tab = new int [n];
    cout << tab[i] wyświetli zawartosc i-tej komórki, a cout << *tab[i] nie zadziała

    0 2
  • #2 15 Mar 2019 11:01
    Mac3k
    Poziom 20  

    Bo tab jest adresem tablicy, operator indeksu [] wyłuskuje element (to co jest pod adresem), więc jaki sens miało by dołożenie operatora * wyłuskującego element spod adresu skoro po prawej stronie masz już po prostu int'a? Jeśli chcesz się dobrać do adresu elementu tab[n] nalezy użyć &. Wtedy np. taka bezsensowna konstrukcja jak

    Kod: c
    Zaloguj się, aby zobaczyć kod

    zadziała.

    1
  • #3 16 Mar 2019 03:16
    LED5W
    Poziom 32  

    Kod: c
    Zaloguj się, aby zobaczyć kod
    cout << tab wyświetli adres, a cout << *tab wyświetli to, co jest pod tym adresem.
    cout << (tab + 1) lub cout << &tab[1] wyświetli adres kolejnego elementu, a cout << *(tab + 1) lub cout << tab[1] jego wartość.
    Zapis tab[1] działa dokładnie tak samo jak *(tab + 1), dlatego taki sam efekt da zapis 1[tab]. W przypadku tablic stosuje się zapis tab[0], a w przypadku pojedynczych zmiennych *w ze względu na czytelność, działanie jest identyczne.

    kosmonauta80 napisał:
    cout << tab[i] wyświetli zawartosc i-tej komórki, a cout << *tab[i] nie zadziała
    A jak miałoby zadziałać? Co chciałbyś otrzymać? Takie działanie jest właściwe dla tablicy wskaźników. Wtedy pobierzesz wartość na którą wskazuje wskaźnik w tablicy.

    1