Ten
int *wskaznik;
int zmienna = 10;
*wskaznik=zmienna;
od tego
int *wskaznik = &zmienna ; Procz tego ze tutaj odrazu pokazalismy na co pokazuje wskaznik.
Mimo wszystko *wskaznik=zmienna mam to rozumiec jako zapis int *wskaznik = &zmienna ? oba zapisy pokazuja to samo.
takie coś: *wskaźnik to tzw. wyłuskanie wskaźnika, czyli już zmienna (żywa), nie wskaźnik;
dlatego też zapis typu:
int *w;
// i od razu:
*w = x;
jest błędem, ponieważ w nie był zainicjowany, zatem nie adresuje niczego - żadnej zmiennej... lecz losowy obszar ramu.
zwykle taki kod daje error: access violation...
o ile mamy szczęście, bo w innych przypadkach, takim przypisaniem, zniszczymy jakieś swoje dane,
co zwykle potem trudno wykryć.
int *w = new int [500]; // to jest przydzielenie nowego obszaru pod adres w.
// i teraz:
*w = x; // to samo co: w[0] = x
jest OK.
w[499] = 7; // też OK, bo w wskazuje na obszar od 0 do 499, a nie tylko na jeden int.
takie coś:
int *w = new int; // przydzielamy tylko 1 int
też jest formalnie OK, no ale w praktyce nigdy takich pierdół się nie robi,
bowiem alokowanie tylko jednej sztuki to czyta głupota...
bo w takim przypadku po prostu wystarczy zdefiniować wprost - zmienną!
int w;