Znaky & a *
Znaky & a * teď znáte každý ve dvou významech a začátečníkům se často pletou. Rozhoduje, kde stojí:
- V deklaraci, tedy když vytváříte proměnnou nebo parametr, stojí hned za typem a jsou součástí typu.
int&čtěte jako „reference na int“ aint*jako „ukazatel na int“. - Ve výrazu, tedy v kódu, který něco počítá, přiřazuje nebo vypisuje, stojí před názvem proměnné a něco s ní dělají.
& | * | |
|---|---|---|
| V deklaraci (za typem) | int& r = x; reference: r je další jméno pro x | int* p = &x; ukazatel: p obsahuje adresu proměnné typu int |
| Ve výrazu (před proměnnou) | &x je adresa proměnné x | *p je proměnná, na kterou p ukazuje |
A když stojí * mezi dvěma hodnotami, jako v cena * 2, je to obyčejné násobení. Dvojité && znáte z podmínek, kde znamená „a zároveň“. V tomto příkladu najdete skoro všechny významy:
#include <iostream>
int main() {
int x = 5;
int& r = x; // deklarace: r je reference na x
int* p = &x; // deklarace: p je ukazatel, výraz &x: adresa x
*p = r * 2; // výraz: *p je proměnná x, r je také x, * mezi nimi násobí
std::cout << x << std::endl;
return 0;
}Tento kód vypíše:
10Když se v nich spletete, překladač vám to obvykle řekne, a často najde několik chyb najednou. Opravujte je od první, jak jste zvyklí.
Jak psát:
Pokyny
Program se nepřeloží: překladač najde chyby na řádcích 5, 6 a 9. Podle tabulky opravte znaky & a * tak, aby každý řádek dělal to, co říká jeho komentář. Program pak vypíše Skóre: 120.
Poslední řádek ale místo skóre vypíše adresu, třeba Přes ukazatel: 0xfff4. Opravte ho, aby přes ukazatel vypsal hodnotu: Přes ukazatel: 120.
Začněte programovat zdarma
6/10