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:
- 8.
- 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
A
Tähdet
taivaalla
- 8.
- 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.