Ks. Ohjelmointi++-monisteen luku 8 kohdasta 8.4 alkaen. Stroustrupin luku 5 sekä Hietasen luvut 9.4, 9.5 ja jonkin verran myös luku 10.
int elaman_tarkoitus = 42;
- Osoitin on muuttuja
int * luku;
on osoitin int-tyyppiseen muuttujaan
- pitää AINA muistaa alustaa:
int *luku = &elaman_tarkoitus
- osoittimen käyttö:
*luku = 42;
cout << *luku;
kissaoso.c
- osoittimeen ei saa sijoittaa suoraan lukua
- osoittimeen saa sijoittaa:
- toisen osoittimen (&muuttuja tms)
- nolla (0)
- nollaosoitin (null pointer) tarkoittaa osoitinta, joka
ei osoita mihinkään
const int NULL = 0;
tyyppi * muuttuja; // tyyppi-tyyppiseen muuttujaan
// osoittava osoitinmuuttuja
void * muuttuja; // osoitin määrittelemättömään tyyppin
- void-osoitinta (void *) pitkin ei saa tähdätä
Voiko sijoitusta i = *p tehdä?
int i;
int *p;
- p on tyyppiä (int*) *p on tyyppiä int
- sijoitus intistä inttiin on ok
VOI
int i;
void *p;
- p on tyyppiä (void*) *p on tyyppiä void
- sijoitus voidista inttiin ei onnistu
EI VOI
Entä p = &i
int i;
int *i;
- i on tyyppiä int; &i on tyyppiä (int*)
- sijoitus (int*):stä (int*):een on ok
VOI
int i;
int i;
void *p;
- i on tyyppiä int; &i on tyyppiä (int*)
- sijoitus (int*):stä (void*):een ONNISTUU
Entäpä osoitin osoittimeen?
int ** ppET; // osoitin osoittimeen, joka osoittaa int-muuttujaan
*ppET on sama muuttuja kuin pET
*pET on sama muuttuja kuin i
joten
i on sama muuttuja kuin **ppET
Osoittimen käyttöä:
- funktio, joka haluaa palauttaa arvon muttei nimessään
void kysy_luku(int * p) {
cin >> *p;
}
int i;
kysy_luku(&i);
Viimeksi muutettu: ke 4 heinäkuu 2001 15:09:36
Antti-Juhani Kaijanaho <gaia@iki.fi>
Perustuu osittain Vesa Lappalaisen ja Kari Kärkkäisen tekemiin
kurssisivustoihin ja teksteihin.