8.5.6 & - merkillä monta eri merkitystä
Vielä eräs inhottava puoli on se, että samalle merkille
& (eikä tämä ole edes ainoa kuormitettu symboli) on
otettu useita eri merkityksiä riippuen siitä missä
yhteydessä merkki esiintyy:
- 1.
- Osoiteoperaattori
: Jos & on jo olemassa olevan muuttujan
edessä, otetaan muuttujan osoite. - scanf("%d",&matka_mm);
- 2.
- Referenssin esittely
: Jos & on muuttujan esittelyn
yhteydessä, esitellään viitemuuttuja (referenssi) - int
&rMatka_mm
- 3.
- Bittitason AND- operaattori:
Jos & esiintyy kahden lausekkeen
välissä, on kyseessä bittitason JA- operaattori: parillinen
= luku & 0xfffe
- 4.
- Looginen AND- operaattori:
Jos & esiintyy 2-kertaisena kahden
lausekkeen välissä, on kyseessä looginen JA- operaattori:
if ( kello < 23 && 0 < rahaa ) ...
Jos
selviämme tästä &- sekamelskasta, selviämme lopuistakin
ongelmista C++:n kanssa.
Yleensä AND operaatiot eivät aiheuta sekaannusta, mutta jokin
muistisääntö tarvitaan siihen milloin kirjoitetaan * ja milloin
&. Olkoon se vaikka:
Vinkki
Tähdet taivaalla
- 1.
- Jos kyseessä on osoiteparametrin välitys tulee * ylös, koska
tähdet ovat taivaalla ja niitä osoitetaan, tällöin &-
merkit tulevat alas!
- 2.
- Jos kyseessä on parametrin välitys referenssin avulla, ei
tarvitse tähtäillä, joten tähtiä ei tule ja jokainen
merkki siirtyy pykälän ylöspäin, eli & merkit ylös
ja alhaalle ei jää mitään!
- 3.
- Tavallisessa arvoparametrin välityksessä ei tarvita
mitään ihmemerkkejä, mutta ei saada ihmeitä
aikaankaan!
Kertaamme "problematiikkaa" vähän myöhemmin, kun
katsomme tarkemmin mitä aliohjelmakutsu oikein tarkoittaa.