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.

nie rozumiem po co są wskazniki

rubensdb 29 Mar 2011 19:54 2356 4
  • #1 29 Mar 2011 19:54
    rubensdb
    Poziom 9  

    Przeczytałem już dużo artykułów na temat wskaźników i dalej nie rozumie po co one są.
    Wiem że zawierają adres komórki pamięci na który wskazuje, ale nie wiem po co to potrzebne. Proszę o łopatologiczne wytłumaczenie.

    0 4
  • #3 30 Mar 2011 02:00
    MirekCz
    Poziom 35  

    Ułatwiają życie.
    Najprostszy przykład. Masz tablicę 100tyś. wartości i chcesz napisać funkcję, która tą tablicę posortuje.
    Teoretycznie mógłbyś wywołać funkcję z przesłaniem do niej jako parametru 100tyś wartości, funkcja by te wartości sortowała i odsyłała Tobie 100tyś wartości z powrotem. Tylko musiałbyś to wszystko przerzucać przez pamięć w lewo i prawo - WOLNE.
    Łatwiej jest wysłać do funkcji wskaźnik na początek tej tablicy a funkcja nie musi zwracać żadnej wartości, bo po prostu posortuje tablicę pod podanym adresem.

    0
  • #4 30 Mar 2011 09:46
    eMCeKa
    Poziom 2  

    MirekCz napisał:
    Ułatwiają życie.


    Albo utrudniają :)

    a łopatologicznie powiedział bym tak :

    Zmienna odwołuje się do adresu w pamięci "na sztywno" - możesz modyfikować zawartość pamięci ale tylko pod tym adresem. Wskaźnikiem skaczesz po pamięci wedle woli (no może prawie).
    Najczęściej wskaźnik zawiera również informacje o typie więc jeśli dajmy na to operujesz typem 8 bajtowym i zwiększysz wartość wskaźnika o 1 to zostanie on przesunięty o te 8 bajtów (jak gdyby wskazywał na kolejne miejsce w tablicy), zwiększysz o 2 przesunięcie wyniesie 16B itd.
    Ponadto tak jak wspomniał kolega Mirek gdy przekazujesz zmienną jako parametr do funkcji tworzona jest tak naprawdę jej kopia, na której funkcja pracuje. Skoro wskaźnik zawiera adres to przekazany do funkcji pozwala operować na oryginałach. Np. funkcję:

    Code:
    typ c = dzielenie(typ a, typ b)


    możesz napisać za pomocą wskaźnika w sposób:

    Code:
    typ blad = dzielenie(typ a, typ b, typ* c)


    gdzie wynik dzielenia trafi do 'c', a jako wynik działania funkcji możesz zwracać wartość błedu (np. dzielenie przez zero) czy jakąkolwiek inną.

    Generalnie jest to chyba najmniej restrykcyjny sposób dostępu do pamięci (poza młotkiem i wiertarką).

    0
  • #5 30 Mar 2011 10:14
    Elektronik9
    Poziom 30  

    Witam.
    Bardzo przystępne wytłumaczenie do czego służą wskaźniki znajduje się w "Symfonii C++ Standard" Jerzego Grębosza.

    0