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. |
|
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. |
|
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. |
|
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- for( int i = 0; i < 100000000; i++ ) { tab[ i ] = i; tab[ i ] += 50; }
Niż to- int * a = tab; for( int i = 0; i < 100000000; i++ ) { * a = i; * a += 50; a++; } Dlaczego!? |
|
pekfos |
» 2019-01-26 17:13:39 Pierwszy kod wypełnia 100000000 elementów tablicy, drugi wypełnia pierwszy element tablicy 100000000 razy. |
|
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 |
|
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: |
|
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? |
|
« 1 » 2 |