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

[C++] Sens używania wskaźników

Ostatnio zmodyfikowano 2013-02-02 12:22
Autor Wiadomość
usmiech
Temat założony przez niniejszego użytkownika
[C++] Sens używania wskaźników
» 2013-02-02 00:04:19
Witam, ucze sie niedlugo C++ i wlasnie 'walcze' ze wskaznikami. Staram sie dobrze zrozumiec zastosowanie wskaznikow, ich role i mozliwosci i ciekawy jestem Waszej opinii. Wiem, ze jest to z jednej strony bardzo przydatne narzedzie, ale z drugiej moze byc niebezpieczne. Jeszcze nie dotarlem do programowania obiektowego, gdzie podobno jest to jeszcze ciekawsze. Na razie jedyny program , ktory napisalem z uzyciem wskaznikow to program porzadkujacy liczby w tablicy od najwiekszej do najmniejszej, lub odwrotnie.Pozdrawiam i z gory dziekuje za Wasze opinie :)
P-75580
DejaVu
» 2013-02-02 00:17:49
Jak my zaczniemy pisać tyle kropek w odpowiedziach co Ty w temacie.... to niczego z naszych odpowiedzi się nie dowiesz. Popraw temat.
P-75581
usmiech
Temat założony przez niniejszego użytkownika
» 2013-02-02 00:36:13
Oki, sorki za klopot :)
P-75583
xevuel
» 2013-02-02 07:48:22
z drugiej moze byc niebezpieczne
Ciężko znaleźć jakikolwiek element dowolnego języka, który nieumiejętnie wykorzystany nie stwarza 'niebezpieczeństwa'.

Tak właściwie, to co my mamy Ci odpowiedzieć? Bo napisałeś tylko co umiesz i czego się uczysz...
P-75587
Hipochondryk
» 2013-02-02 09:17:26
zaiste chodzi Ci dlaczego wskaźniki są fajne przydatne itp. Pozwól, że zacytuję Ci pewną mądrą osobę.
"Wyobraź sobie, że masz w ręce bardzo gruby rozkład jazdy. Taki na 600 stron. Ktoś pyta Cię o pociąg z Paryża do Marsylii. Otwierasz więc rozkład jazdy i szukasz przewracając strony. Wreszcie po dłuższym czasie trafiasz na właściwą stronę i przebiegając palcem kolumny  cyfr znajdujesz to, czego szukałeś. Dumnym głosem mówisz - 9:26 i zamykasz rozkład z trzaskiem.
Wtedy ten ktoś pyta "- A następny?". Bierzesz znowu rozkład jazdy i przewracasz strony trafiasz na własciwą, potem  znowu przebiegasz kolumny i..jest 13:50.
Tylko że teraz jesteś już sprytniejszy : po odpowiedzi , na wszelki wypadek, trzymasz palec wskazujący na znalezionej godzinie odjazdu. Jeśli Twój przyjaciel zapta Cię teraz "- a następny...?" - błyskawicznie przesuniesz palec o jedną kolumnę w prawo i odczytasz godzinę. Jeśli zapyta Cię "-a o której on jest w Lyonie?" wtedy przesuniesz palec kilka linijek w dół.
Podany przykład ilustruje życie ze wskaźnikami i bez. Co było wskaźnikiem w naszym przypadku? był to Twój palec, ale nie tylko : Także wiedza o tym, jak należy go przesunąć w przypadku pytania "A następny?".
Jest to cytat z Symfoni C++ autorstwa Jerzego Grębosza. (polecam szczerze do nauki!).

Czyli widzisz zastosowanie wskaźników. lecz to tyklo niewielka część! W przyszłości dojdą iteratory, wskaźniki do obiektów zamiast * będziesz używać -> .
ogólnie moim zdaniem wskaźniki są świetne. Nie wyobrazam sobie pracy na tablicach, przesyłania argumentów do funkcji bez użycia wskaźnika, tak samo obiektowości bez wskaźników. Po prostu dla mnie stały się czymś nieodłącznym w kodzie. Czasowa rezerwacja miejsca pod zmienne, by zaraz potem je usunąć - oczywiście jeśli jest sens. Wskaźnik ma mnóstwo zastosowań, lecz można nim wiele wyrządzić jeśli się nieumiejętni nim stosuje, lecz w mojej całej karierze programistycznej(niestety tylko 2 lata) nigdy nic nie uszkodziłem za pomocą wskaźnika przypadkiem. Umiejętnie napisany program za pomocą wskaźnika potrafi dużo szybciej się wykonać, jak i dużo nabroić.
Moje ogólne wrażenie o wskaźnikach ? Mogę je porównać to miłości pałającej do kobiety. Na  początku "ach jakie one świetne, lecz trudne do ogarnięcia"
po czasie " Już wiem, że jeśli mówi tak, to może chodzić o nie" kolejny etap "Myślę, że Cię rozumiem, lecz Ty mnie zaskakujesz" , aż wkońcu przechodzisz do etapu " Hej! To jest naprawdę świetne! jak ja mogłem bez tego żyć?"

Takie jest moje zdanie, i myślę że odpowiedizałem na Twoje pytanie, lecz jeśli nie o to Ci chodziło to sprecyzuj pytanie.

Pozdrawiam
Artur Lisowski
P-75588
RazzorFlame
» 2013-02-02 09:47:23
Gdybyś szukał na forum nie musiałbyś zakładać tematu. Zaledwie kilka dni temu pytałem o coś podobnego:
Dynamiczne obiekty/struktury

BTW. Wyobrażasz sobie powiedzmy w grze menadżer obiektów za pomocą którego chciałbyś wyświetlać dany obiekt? Możesz ofc w metodzie która to wyświetla dać jako argument referencje na okno w którym ma być to wyświetlone. Ale po co? Przecież równie dobrze można zrobić to w ten sposób: (załóżmy że klasa GameWindow przechowuje nasze okno):
C/C++
class CObiectManager
{
    std::vector < obiect > mUnits;
public:
    GameWindow * device;
    void SetDevice( GameWindow & window );
    void DrawOnDevice( int unitID );
};
Jak widzisz metoda DrawOnDevice nie posiada wtedy argumentu w którym podaje się okno. Wystarczy przy deklarowaniu takowego menadżera wywołać 1 raz metode SetDevice która ustawi ten wskaźnik na okno na którym chcemy wyświetlać obiekty.

EDIT:
Jeślibyś robił taki menadżer w grze to żebyś nie musiał zakładać następnego tematu, powiem ci (chociaż powinieneś już to wiedzieć po przeczytaniu lekcji o wskaźnikach) że w konstruktorze klasy powinieneś ten wskaźnik na okno ustawić na wartość zerową bo w przeciwnym razie wskaźnik ten będzie zawierał śmieci i może (ba w większości przypadkach to zrobi) "zknoci" coś w programie i możemy dostać piękny komunikat od windowsa że program się zawiesił i nie odpowiada.
P-75589
usmiech
Temat założony przez niniejszego użytkownika
» 2013-02-02 12:22:28
Dzieki sliczne, o to mi chodzilo.. Pozdrawiam :)
P-75590
« 1 »
  Strona 1 z 1