colorgreen19 Temat założony przez niniejszego użytkownika |
Zmienna vs wskaźnik na zmienną » 2014-03-18 16:06:50 Może najpierw nppisze jak ja to rozumiem: P1 P2 { int * i = new int; delete i; }
Podsumowanie wedlug mnie: pamiec zuzywana poczatka w obydwóch przykladach jest taka sama, zwieksza sie dopiero jak program zacznie wykonywac ten zakres/blok, pamiec sie zwiekszy, a potem zmaleje. Roznica polega na tym ze "docieranie" przez wskaznik jest szybsze(moze nie w przypadku tej zmiennej). Pytanie: Czy mam racje? jesli nie, to prosze o wyprowadzenie mnie z błędu |
|
pekfos |
» 2014-03-18 17:11:13 pamiec zuzywana poczatka w obydwóch przykladach jest taka sama |
Niekoniecznie. zwieksza sie dopiero jak program zacznie wykonywac ten zakres/blok, pamiec sie zwiekszy, a potem zmaleje. |
Zwiększa się tylko w drugim kodzie. Roznica polega na tym ze "docieranie" przez wskaznik jest szybsze |
Nie. |
|
Parapet |
» 2014-03-18 17:21:34 @pekfos: Czasami nie do wskaźnika nie docieramy szybciej? |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2014-03-18 17:22:01 skoro docieranie przez wskaznik nie jest szybsze (a tak czytałem m.in. w symfonii c++ stranard (3b) ale to było odnośnie wielowymiarowych dużych tablic) to nadal nie rozumiem ich stosowania. Jedyne co do mnie "przemawia" to to, że jak mam gre i odpalam np. tryb singleplayer to moge ten tryb stworzyć dopiero w trakcie uruchomienia procesu gry, dzieki czemu, na poczaktu gra nie zuzywa tak duzo pamieci, jakby ten tryb byl przyszykowany na poczatku i cały czas czekal tylko na sygnał ze ma dzialac. Ale skoro to nie dziala tak to juz nie mam pojecia czemu wskaźniki sa tak wychwalane... |
|
pekfos |
» 2014-03-18 17:40:03 @pekfos: Czasami nie do wskaźnika nie docieramy szybciej? |
Możesz jaśniej, bez zbędnych 'nie'? Przez wskaźnik dociera się do pamięci wolniej, niż do zwykłej zmiennej, która nawet nie musi być w pamięci. nadal nie rozumiem ich stosowania. |
Np przydają się, gdy chcemy pozyskać pamięć o nieznanych w czasie kompilacji rozmiarach. Albo jak chcemy przechowywać obiekty o nieznanych typach. Jedyne co do mnie "przemawia" to to, że jak mam gre i odpalam np. tryb singleplayer to moge ten tryb stworzyć dopiero w trakcie uruchomienia procesu gry |
To również da się bez wskaźników. |
|
RazzorFlame |
» 2014-03-18 21:54:43 Może też się udzielę w tym temacie. Kiedyś też uważałem, że to bez sensu, jednak w praktyce jest inaczej. Popatrz: class Okno { }; class Obrazek { public: void draw( Okno okno, int x, int y ) { okno.draw( this ); } void draw( Okno * okno, int x, int y ) { okno->draw( this, x, y ); } };
Poza różnicą w składni możemy też zaobserwować to, że w przeciążeniu funkcji draw z wskaźnikiem zamiast zwykłej zmiennej można ją modyfikować. Jeżeli użyjesz pierwszej funkcji to obrazek zostanie wyświetlony na kopii a nie na tym co chcemy. Poza tym jeżeli chcesz raz ustalić sobie taki wskaźnik i potem nie podawać go [Okno *okno] w funkcji to możesz użyć statycznego wskaźnika: class Obrazek { public: static Okno * okno; static Okno * getPointer() { return okno; } void draw( int x, int y ) { getPointer()->draw( this, x, y ); } static void setPointer( Okno * ptr ) { okno = ptr; } } Okno * Obrazek::okno = NULL;
int main() { Okno naszeOkno; Obrazek::setPointer( & naszeOkno ); Obrazek obrazek; obrazek.draw( 0, 0 ); return 0; }
Widać zastosowanie prawda? |
|
colorgreen19 Temat założony przez niniejszego użytkownika |
» 2014-03-18 22:27:19 szczerze to nie :/ Chodzi ci o to że funkcja bez wskaznika rysuje tak naprawde jego chwilowa kopie a ze funkcja ze wskaznikiem jego jako oryginal? ale to moglbym zrobic przez referencje np. okno.draw( & obrazek, x, y ) ... |
|
DejaVu |
» 2014-03-19 12:11:05 @up: Twój przykład nie zawiera referencji. Twój przykład zawiera pobranie adresu zmiennej. |
|
« 1 » 2 |