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

Wskaźniki do tablicy dwuwymiarowej - posługiwanie się nimi

Ostatnio zmodyfikowano 2016-12-08 13:23
Autor Wiadomość
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.
P-154585
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?
P-154596
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:
C/C++
int tab[ 10 ];

int * p1 = & tab[ 0 ]; //p1 wskazuje na pierwszy element tab
int * p2 = tab; //p2 też wskazuje na pierwszy element tab
int( * p3 )[ 10 ] = & tab; //p3 wskazuje na całą 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.
P-154597
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?
P-154633
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.
C/C++
// Np. mamy tablicę tablic, ma 3 elementy, a każdy element jest tablicą 10 intów
int t[ 3 ][ 10 ];

int( * p )[ 10 ] = t; //p wskazuje na pierwszą tablicę int[10] w tablicy t

++p; //a teraz na drugą
++p; //a teraz na trzecią
++p; //a teraz wskazuje poza tablicę t, dalej inkrementować nie można
P-154641
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...
P-154642
jankowalski25
» 2016-12-08 13:14:57
This->~Klasa();
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ć.
P-154650
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
P-154651
1 « 2 »
Poprzednia strona Strona 2 z 2