Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
V Go je ukazovateľ premenná, ktorá ukladá adresu inej premennej. Adresa je jedinečné miesto v pamäti, kde je premenná uložená. Ukazovatele sa vytvárajú pomocou operátora `&`, ktorý vracia adresu premennej.
Povedzme napríklad, že máme premennú „číslo“ typu „int“. Pomocou operátora „&“ môžeme vytvoriť ukazovateľ na „číslo“:
``` ísť
číslo :=10
ukazovateľ :=&číslo
```
Premenná `pointer` teraz ukladá pamäťovú adresu premennej `number`.
Na prístup k hodnote ukazovateľa môžeme použiť operátor `*`. Operátor `*` dereferencuje ukazovateľ a vráti hodnotu uloženú na adrese pamäte, ktorú ukazovateľ obsahuje.
V našom príklade môžeme dereferencovať premennú „ukazovateľ“ a získať tak prístup k hodnote premennej „číslo“:
``` ísť
dereferencedNumber :=*ukazovateľ
```
Premenná „dereferencedNumber“ teraz ukladá hodnotu premennej „number“, ktorá je 10.
Ukazovatele možno použiť aj na vykonávanie aritmetiky ukazovateľov. Aritmetika ukazovateľa je proces pridávania alebo odčítania celých čísel od ukazovateľa na zmenu adresy pamäte, na ktorú odkazuje.
Povedzme napríklad, že máme pole celých čísel s názvom `arr` a chceme iterovať cez prvky poľa. Operátor `+` môžeme použiť na pridanie celého čísla do ukazovateľa, aby sme sa presunuli na ďalší prvok poľa:
``` ísť
arr :=[5]int{1, 2, 3, 4, 5}
// Inicializuje ukazovateľ na prvý prvok poľa
ukazovateľ :=&arr[0]
// Iterácia cez pole pomocou aritmetiky ukazovateľa
pre i:=0; i
hodnota :=*ukazovateľ
// Vytlačí hodnotu
fmt.Println(hodnota)
// Zvýšením ukazovateľa sa presuniete na ďalší prvok poľa
ukazovateľ++
}
```
V tomto príklade je ukazovateľ „ukazovateľ“ pôvodne nastavený na adresu prvého prvku poľa. Potom cyklus „for“ iteruje cez pole, pričom pri každej iterácii dereferencuje „ukazovateľ“, aby získal hodnotu aktuálneho prvku. "Ukazovateľ" sa potom zvýši, aby sa presunul na ďalší prvok poľa.
Ukazovatele môžu byť odovzdané ako argumenty funkciám. To umožňuje funkciám priamo manipulovať s pamäťovou adresou premenných, namiesto vytvárania kópie premennej.
Povedzme napríklad, že máme funkciu s názvom „inkrement“, ktorá zvyšuje hodnotu celého čísla. Ukazovateľ na celé číslo môžeme odovzdať ako argument funkcii `increment`, čo umožňuje funkcii priamo upraviť hodnotu celého čísla:
``` ísť
func increment(ptr *int) {
// Dereferencovanie ukazovateľa na získanie hodnoty na adrese pamäte
hodnota :=*ptr
// Zvýšte hodnotu
hodnota++
// Uloženie zvýšenej hodnoty späť na adresu pamäte
*ptr =hodnota
}
func main() {
// Vytvorenie celočíselnej premennej
číslo :=10
// Odovzdať ukazovateľ na premennú ako argument funkcie inkrementácie
prírastok (&číslo)
// Vytlačí zvýšenú hodnotu
fmt.Println(číslo) // Výstup:11
}
```
V tomto príklade funkcia „increment“ berie ako argument ukazovateľ na celé číslo. Funkcia dereferencuje ukazovateľ, aby získala hodnotu na adrese pamäte, inkrementuje hodnotu,
Odovzdávanie ukazovateľov funkciám