karambaHZP |
» 2016-12-06 15:48:10 dlaczego J. Grębosz dobitnie stwierdzał, że: "nazwa tablicy to wskaźnik do jej pierwszego elementu |
. Nazwa tablicy jest równocześnie adresem do jej pierwszego elemntu, to nie to samo co bycie wskaźnikiem na pierwszy element tej tablicy. Nie chce mi się szukać, ale wspominał także o konwersji do wskaźnika. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-12-06 19:31:37 Dokładnie, to napisał "Nazwa tablicy jest jakby stałym wskaźnikiem do jej zerowego elementu." Przy czym wcześniej faktycznie pisał, że jest to adres. No to jeszcze poprosiłbym o odpowiedzi na: czym się różni wskaźnik na tablicę a wskaźnik do elementu tablicy? oraz: po co przekazujemy tablice przez referencję, skoro i tak zawsze pracujemy na oryginale, a nie kopii? |
|
Monika90 |
» 2016-12-06 20:37:20 Nazwa tablicy jest jakby stałym wskaźnikiem do jej zerowego elementu. |
Równie dobrze mógłby napisać że "Nazwa zmiennej typu float jest jakby stałą typu int." czym się różni wskaźnik na tablicę a wskaźnik do elementu tablicy? |
Większość ludzi kiedy mówi "wskaźnik na tablicę", to ma na myśli wskaźnik na jej pierwszy element (element o indeksie zero) i nawet nie wie, że to nie to samo. A różnią się typem oraz sposobem w jaki się je pobiera: int tab[ 10 ];
int * p1 = & tab[ 0 ]; int * p2 = tab; int( * p3 )[ 10 ] = & tab;
A skoro różnią się typem, to zachowują się inaczej podczas operacji arytmetycznych p1 + 1 to wskaźnik do drugiego elementu tab, a p3 + 1 wskazywałby na tablicę int[10] znajdującą się w pamięci za tablicą tab (gdyby istniała). po co przekazujemy tablice przez referencję, skoro i tak zawsze pracujemy na oryginale, a nie kopii? |
Przekazuje się przez referencję po to żeby uniknąć operatora & w miejscu wywołania oraz operatora * wewnątrz funkcji. Raczej rzadko używa się wskaźników lub referencji do całych tablic, to było pokazane tylko po to żebyś wiedział ze można. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-12-07 22:13:20 wskazywałby na tablicę int[10] znajdującą się w pamięci za tablicą tab (gdyby istniała). To znaczy, że gdybyśmy stworzyli tablicę int tab2[10] i przypadkiem znalazłaby się w pamięci zaraz po tablicy "tab" to na nią wskazałby wskaźnik? |
|
Monika90 |
» 2016-12-07 23:48:40 Nie wiadomo co jest w pamięci za danym obiektem. Wskaźnik wskazujący za obiekt można utworzyć, ale nie można odwoływać się poprzez ten wskaźnik, to znaczy, nie można użyć na nim operatorów * lub ->, bo prowadziło by to do niezdefiniowanego zachowania. Co innego kiedy obiekt jest częścią tablicy i nie jest jej ostatnim elementem. int t[ 3 ][ 10 ];
int( * p )[ 10 ] = t;
++p; ++p; ++p;
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-12-08 00:25:40 Ok, dzieki za wytlumaczenie. Mam jeszcze jedna sprawe, ale jest na tyle krotka, ze zapytam tutaj. W ksiazce napisane jest: "Zapytasz moze: a co zrobic, jesli destruktor uruchamiamy z wnetrza klasy? Przeciez wowczas odnoszac sie do funkcji skladowych nie okresla sie o ktory obiekt chodzi. Wiadomo, ze destruktor wywolujemy wowczas na rzecz tego wlasnie obiektu. Zatem nic nie stoi przed nazwa uruchamianej funkcji skladowej(...)" Autor ma na mysli mowiac wywolanie destruktora z wnetrza klasy, wywolanie destruktora poprzez jakas funkcje skladowa? Czyli np Void F() { This->~Klasa(); } Czy o to chodzi? Ehh... Tak na marginesie to nie wiem, czy to programowanie mnie nie przerasta i czy to byl dobry wybor... |
|
jankowalski25 |
» 2016-12-08 13:14:57 Strzelam, że chodzi o coś w stylu delete this . Jeśli tak, to nie jest "krótka sprawa". Poszukaj istniejących tematów, ewentualnie załóż nowy. W tym temacie chyba lepiej tego nie rozwijać. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-12-08 13:23:47 No dobra, na razie to tyle, dzieki wsyzstkim za pomoc. Temat zamykam |
|
1 « 2 » |