#include <iostream>
using namespace std;
int main()
{
int a = 10;
int *w=&a;//rozumiem
int *wsk_na_wsk=w;//Nie rozumiem czemu akurat tak zapisane to jest . Nie powinienem czasem podac adresu tego wsk ? czy nazwa wskaznika to poprostu adres ? (sie pogubilem).
return 0;
}
w
to wskaźnik na int
.
wsk_na_wsk
to też wskaźnik na int
(błędna nazwa).
wsk_na_wsk
dostaje taką samą wartość jak w
, czyli adres zmiennej a
.
Gdybyś chciał adres wskaźnika, to musiałbyś mieć
int** wsk_na_wsk = &w;
1.Czyli zeby pokazac za pomoca wskaznika to co jest przechowywane w innym wskazniku wystarczy int *wsk = w (gdzie w to wskaznik ) ? Nie wiem dlaczego ale jakos mnie to nie przekonywuje (powinnienem to zapamietac na pamiec , czy jakos zrozumiec ? )
2.Co to jest wyłuskanie wskaznika ?
3.Jezeli chce adres innego wskaznika to musze int **wsk=&w a kiedy trzeba bylo by uzyc 3 * (wskaznik ktory pokazuje na inny wskaznik w ktorym przechowywany jest adres innego wskaznika ? )
-
O ile dobrze cie rozumiem, to tak, wystarczy
int *wsk = w
. A można zrozumieć to chociażby tak, zeint *
jest typem danych. Tak samo jakint
czydouble
. Więc maszjakis_tym zmienna = zmienna_2
. Tu chyba dokładnie widać, co się robi:zmienna_2
zostaje przekopiowana dozmienna
. W przypadku wskaźników i zapisuint *wsk = w
przekopiowana zostanie wartość wskaźnika, a jak wiemy wartością wskaźnika (tym, co może on przechowywać) jest adres w pamięci. Więc po takiej operacjiwsk
wskazuje tam gdziew
.
Zdaje mi się, że pisałem Ci o tym... -
Wyłuskanie wskaźnika (
operator*
) to "dobranie" się do zmiennej, na którą ten wskaźnik wskazuje. Zauważ, że
int *wsk = w;
cout << (*wsk);
w tych zapisach*
oznacza coś innego: w pierwszym jest to informacja, że naszym typem jest wskaźnik, natomiast w zapisie drugim jest to owe wyłuskanie wskaźnika. -
Nie wiem dlaczego nie rozumiesz.
TYP a;
TYP *wskaznik = &a
i już.wskaznik
wskazuje teraz na obiekta
. Jeśli chcesz wskaźnik na wskaźnik na wskaźnik, toTYP
bedzie tutajwskaznik na wsiaznik
Czyli:
int **a;
int ***wskaznik = &a;
O tym też już pisałem w innym temacie,
Wskaźnik to też zmienna, więc przypisujesz jednej zmiennej drugą zmienną. Sam pomyśl czemu nie robisz np. czegoś takiego:
int a = 0;
int wsk = &a;
Bardzo dobry przyklad :D rozumiem ^^
int *wsk
to to samo co int* wsk
. teraz można sobie łatwo zapamiętać, że jeżeli wsk
jest typu int*
to *wsk
jest typu int
.