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.

Prośba o pomoc w zrozumieniu wskaźników - początkujący

TheSevcio 10 Lut 2016 13:21 606 9
  • #1 10 Lut 2016 13:21
    TheSevcio
    Poziom 8  

    Witam. Programuję (albo raczej staram się) w C. Nie mogę za nic w świecie ogarnąć wskaźników. Mógłby ktoś łopatologicznie wytłumaczyć, czemu to nie chce zadziałać?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 9
  • Pomocny post
    #3 10 Lut 2016 13:47
    LightOfWinter
    Poziom 29  

    Witam

    Powinno być:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Nie działało bo zadeklarowałeś wskaźnik na int, a próbowałeś mu przypisać wartość zamiast adresu. Potem to samo robiłeś linijkę niżej, czyi wskaźnikowi przypisywałeś wartość a nie adres.

    Mówiąc prościej wskaźnik zawsze pozostanie wskaźnikiem. Możesz zrobić 2 rzeczy, przypisać mu nowy adres lub zmienić wartość na którą wskazuje.

    Proponuje poczytać Synfonia C++ Grębosza, jest tam to dobrze wytłumaczone.

    Kolega powyżej mnie uprzedził :)

    0
  • #4 11 Lut 2016 12:17
    TheSevcio
    Poziom 8  

    Czyli zawsze wskaźnik musi wskazywać na adres. A czym się różni zapis:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    od
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #5 11 Lut 2016 12:27
    LightOfWinter
    Poziom 29  

    TheSevcio napisał:
    Czyli zawsze wskaźnik musi wskazywać na adres. A czym się różni zapis:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    od
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Witam

    Wskaźnik z definicji przechowuje adres, zmiennej, stałej, innego wskaźnika, funkcji itd.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jeśli p1 jest wskaźnikiem jak w poście powyżej jest błędnym zapisem.
    Zmiennej na którą skazuje wskaźnik próbujesz przypiąć adres zmiennej a.

    Kod: c
    Zaloguj się, aby zobaczyć kod
    [/quote]
    Zapis poprawny, wskaźnikowi przypisujesz adres zmiennej a.

    0
  • #6 11 Lut 2016 13:07
    TheSevcio
    Poziom 8  

    Mówisz, że wskaźnik musi wskazywać na adres. Tutaj mam kod, w którym *p1=b. B nie jest przecież adresem, a kod działa bezproblemowo.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #7 11 Lut 2016 13:20
    LightOfWinter
    Poziom 29  

    TheSevcio napisał:
    Mówisz, że wskaźnik musi wskazywać na adres.


    Witaj,
    To Ty tak napisałeś nie ja.
    Wskaźnik jest adresem. Nie jest natomiast prawdą że musi wskazywać na adres.

    TheSevcio napisał:
    Tutaj mam kod, w którym *p1=b. B nie jest przecież adresem, a kod działa bezproblemowo.
    Kod: c
    Zaloguj się, aby zobaczyć kod



    W powyższym kodzie jest napisane *p1 =b, czyli zmiennej na którą wskazuje wskaźnik przypisujesz wartość b. Wszystko jest poprawnie.
    Wskaźnik pozostaje adresem.

    Masz 2 operatory * i &
    *- mówi że interesuje Cie wartość na która wskazuje wskaźnik
    & - przed zmienną pobiera jej adres.

    0
  • #8 11 Lut 2016 13:42
    TheSevcio
    Poziom 8  

    Czyli, jak dobrze rozumiem, w p1=&b, p1, sobie wskazuje na to, że może zmienić wartość c.
    I dopiero w *p1=b, p1 zmienia wartość c, na wartość b?

    0
  • #9 11 Lut 2016 13:47
    LightOfWinter
    Poziom 29  

    TheSevcio napisał:
    Czyli, jak dobrze rozumiem, w p1=&b, p1, sobie wskazuje na to, że może zmienić wartość c.
    I dopiero w *p1=b, p1 zmienia wartość c, na wartość b?


    Witam

    p1 = &b - ustawia wskaźnik na adres zmiennej b.
    *p1 =b zmienia wartość zmiennej na którą wskazuje wskaźnik na wartość b.

    0
  • #10 11 Lut 2016 13:57
    TheSevcio
    Poziom 8  

    Źle napisałem post, miałem na myśli p1=&c, wskazuje na adres c. I dopiero *p1=b, zmienia wartość c na b. Ale to samo z tego wynika, dzięki za pomoc ;)

    0