Menu
Coddy logo textTech

Fonksiyonlarda İşaretçi Kullanımı

Coddy'nin GO Journey'sinin Temeller bölümünün bir parçası — ders 64 / 109.

Fonksiyonlar, değişkenleri işaretçiler (pointers) aracılığıyla kabul edebilir ve değiştirebilir. Bu, fonksiyonların sadece bir kopyayı değil, orijinal değeri değiştirmesine olanak tanır.

Bir işaretçi (pointer) aracılığıyla bir değeri değiştiren bir fonksiyon oluşturun:

func main() {
    number := 10
    fmt.Println("Before:", number)
    
    // Pass the address of number
    doubleValue(&number)
    
    fmt.Println("After:", number)
}

func doubleValue(num *int) {
    // Modify the value at the pointer's address
    *num = *num * 2
}

Çıktı, fonksiyon tarafından değiştirilen değeri gösterir:

Before: 10
After: 20

&number değerini geçirdiğimizde, fonksiyon bir işaretçi alır ve orijinal değişkeni değiştirebilir.

challenge icon

Görev

Başlangıç

Bu görevde, fonksiyonlarda pointer (işaretçi) kullanımını pratik edeceksiniz. Bir string işaretçisi alan ve bu string değerini büyük harfe dönüştüren bir fonksiyonu tamamlamanız gerekiyor.

makeUppercase fonksiyonu sizin için zaten tanımlanmıştır. Göreviniz, strings.ToUpper() fonksiyonunu kullanarak işaretçinin (pointer) gösterdiği string değerini değiştirmektir.

Kopya kağıdı

Fonksiyonlar, bir kopya yerine bellek adresini alarak pointer'lar aracılığıyla değişkenleri değiştirebilirler:

func main() {
    number := 10
    
    // & kullanarak number'ın adresini geçirin
    doubleValue(&number)
    
    fmt.Println(number) // Output: 20
}

func doubleValue(num *int) {
    // * kullanarak pointer'ın adresindeki değeri değiştirin
    *num = *num * 2
}

Temel pointer sözdizimi:

  • &variable - bir değişkenin adresini alır
  • *pointer - değeri okumak/değiştirmek için bir pointer'ın referansını çözer (dereference)
  • *type - bir pointer parametre tipi tanımlar

Kendin dene

package main

import (
	"fmt"
	"strings"
)

// makeUppercase bir dize işaretçisi alır ve dizeyi büyük harfe dönüştürür
func makeUppercase(strPtr *string) {
	// TODO: strPtr'nin işaret ettiği dizeyi değiştirmek için strings.ToUpper() kullanın
	// İpucu: Dize değerine erişmek için işaretçinin referansını çözmeniz (dereference) gerekir
	? = strings.ToUpper(?)
	
}

func main() {
	// Halihazırda bir dize değişkenimiz var
	message := "hello, world"
	
	// Orijinal mesajı yazdır
	fmt.Printf("Original message: %s\n", message)
	
	// message değişkeninin adresi ile makeUppercase fonksiyonunu çağır
	makeUppercase(&message)
	
	// Değiştirilmiş mesajı yazdır
	fmt.Printf("Modified message: %s\n", message)
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler