Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Nie rozumiem sensu wskaźników!

Ostatnio zmodyfikowano 2019-01-26 19:18
Autor Wiadomość
laress
Temat założony przez niniejszego użytkownika
Nie rozumiem sensu wskaźników!
» 2019-01-26 16:42:33
Używam już wskaźników od dawna ale nadal nie rozumiem po co one są. Na studiach uczyli mnie tak: "Jeśli masz książkę z rozkładem jazdy, aby znaleźć interesujący cię odjazd danego autobusu musisz najpierw odnaleźć go w spisie treści a dopiero po tym możesz odczytać właściwą godzinę itp. a jeśli masz wskaźnik(np. zakładka) to we wskaźniku masz adres i udajesz się tam od razu(bez błądzenia po spisie treści)." Wszystko było by pięknie ale wskaźnik to też zmienna i też musimy poszukać jej adresu w magistrali aby odczytać jej wartość, więc jaki jest sens ją stosować? Proszę pomóżcie mi od kilku dni przez to boli mnie głowa.
P-173689
pekfos
» 2019-01-26 16:59:25
Wszystko było by pięknie ale wskaźnik to też zmienna i też musimy poszukać jej adresu w magistrali aby odczytać jej wartość, więc jaki jest sens ją stosować?
Jeśli pytasz z punktu widzenia sprzętowego, to zapominasz o istnieniu rejestrów.

Na studiach uczyli mnie tak: "Jeśli masz książkę z rozkładem jazdy, aby znaleźć interesujący cię odjazd danego autobusu musisz najpierw odnaleźć go w spisie treści a dopiero po tym możesz odczytać właściwą godzinę itp. a jeśli masz wskaźnik(np. zakładka) to we wskaźniku masz adres i udajesz się tam od razu(bez błądzenia po spisie treści)."
Nie mam pojęcia, co próbowali ci przez to powiedzieć. Pamięć to zwykle bardzo duża liczba bajtów i musisz mieć numer bajtu, do którego chcesz się odwołać. Wskaźnik od liczby różni tylko semantyka. W asemblerze nie masz wskaźników, ale to samo możesz osiągnąć. Tylko znacznie łatwiej strzelać sobie w stopy.
Może przez spis treści mieli na myśli nazwy zmiennych. Nie musisz znać nazwy zmiennej, by się od niej odwołać przez wskaźnik. Ale takie tłumaczenie mija się z głównym celem wskaźników, czyli tym, że pamięć przydzielona programowi nie musi istnieć jako nazwana zmienna. W tym scenariuszu zakładka jest jedynym sposobem na dostanie się do danego miejsca w pamięci.
P-173690
YooSy
» 2019-01-26 17:00:03
Z innej beczki: masz dużą strukturę. Tworzysz obiekt takiej struktury i żeby uniknąć kosztownego kopiowania
jej w inne miejsce (np. funkcja) odwołujesz się do niej poprzez przekazany adres (wskaźnik, referencja).
Alokujesz dynamicznie zasób w funkcji, i chcesz zwrócić ten zasób do miejsca wywołania.

W nowoczesnym C++ używa się ich znacznie rzadziej niż w poprzednim stuleciu,
jednak czasem się przydają. Poza tym warto je znać i rozumieć, bo są używane
w innych zewnętrznych bibliotekach jako parametry funkcji.
P-173691
laress
Temat założony przez niniejszego użytkownika
» 2019-01-26 17:11:39
Nie rozumiem bardziej tego dlaczego działają szybciej niż normalne zmienne:

To wykona się wolniej-
C/C++
for( int i = 0; i < 100000000; i++ ) {
    tab[ i ] = i;
    tab[ i ] += 50; }

Niż to-
C/C++
int * a = tab;
for( int i = 0; i < 100000000; i++ ) {
    * a = i;
    * a += 50;
    a++; }

Dlaczego!?
P-173692
pekfos
» 2019-01-26 17:13:39
Pierwszy kod wypełnia 100000000 elementów tablicy, drugi wypełnia pierwszy element tablicy 100000000 razy.
P-173693
laress
Temat założony przez niniejszego użytkownika
» 2019-01-26 17:15:45
pomyłka ma być a++;
ale nawet z a++ nadal to działa szybciej
P-173694
pekfos
» 2019-01-26 17:23:16
Co to znaczy 'szybciej'? U mnie wersja wskaźnikowa działa 3.4% szybciej, co nic nie znaczy, bo wykonując benchmark poprawnie, czyli z włączonymi optymalizacjami, obie wersje działają równie szybko. Nie sprawdzałem, ale wygenerowany kod zapewne jest identyczny, lub co najmniej bardzo podobny. Jeśli chcesz liczb:
tablicawskaźniktablica (-O2)wskaźnik (-O2)
296 ms284 ms136 ms137 ms
294 ms282 ms136 ms134 ms
294 ms281 ms135 ms135 ms
P-173695
Monika90
» 2019-01-26 17:28:49

"Jeśli masz książkę z rozkładem jazdy, aby znaleźć interesujący cię odjazd danego autobusu musisz najpierw odnaleźć go w spisie treści a dopiero po tym możesz odczytać właściwą godzinę itp. a jeśli masz wskaźnik(np. zakładka) to we wskaźniku masz adres i udajesz się tam od razu(bez błądzenia po spisie treści)." Wszystko było by pięknie ale wskaźnik to też zmienna i też musimy poszukać jej adresu w magistrali aby odczytać jej wartość
To są nonsensy z kursu Mirosława Zelenta. Teraz tego uczą na studiach?
P-173696
« 1 » 2
  Strona 1 z 2 Następna strona