Git - İşaretçiler

Go'daki işaretçileri öğrenmesi kolay ve eğlencelidir. Bazı Go programlama görevleri işaretçilerle daha kolay gerçekleştirilir ve referansla arama gibi diğer görevler işaretçiler kullanılmadan gerçekleştirilemez. Bu nedenle, mükemmel bir Go programcısı olmak için işaretçileri öğrenmek gerekli hale gelir.

Bildiğiniz gibi, her değişken bir bellek konumudur ve her bellek konumunun, bellekteki bir adresi belirten ve işareti (&) operatörü kullanılarak erişilebilen tanımlanmış adresi vardır. Tanımlanan değişkenlerin adresini yazdıracak aşağıdaki örneği düşünün -

package main

import "fmt"

func main() {
   var a int = 10   
   fmt.Printf("Address of a variable: %x\n", &a  )
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Address of a variable: 10328000

Böylece hafıza adresinin ne olduğunu ve ona nasıl erişileceğini anladınız. Şimdi işaretçilerin ne olduğunu görelim.

İşaretçiler Nelerdir?

Bir pointerdeğeri başka bir değişkenin adresi, yani bellek yerinin doğrudan adresi olan bir değişkendir. Herhangi bir değişken veya sabit gibi, herhangi bir değişken adresini saklamak için kullanmadan önce bir işaretçi bildirmelisiniz. Bir işaretçi değişken bildiriminin genel şekli -

var var_name *var-type

Buraya, typeişaretçinin temel türüdür; geçerli bir C veri türü olmalı vevar-nameişaretçi değişkeninin adıdır. İşaretçi bildirmek için kullandığınız yıldız işareti *, çarpma için kullandığınız yıldız işaretiyle aynıdır. Bununla birlikte, bu ifadede yıldız işareti, bir değişkeni işaretçi olarak belirlemek için kullanılmaktadır. Aşağıda geçerli işaretçi bildirimi verilmiştir -

var ip *int        /* pointer to an integer */
var fp *float32    /* pointer to a float */

Tüm işaretçilerin değerinin gerçek veri türü, ister tam sayı, ister kayan değer olsun, isterse başka türlü olsun, aynıdır, bir bellek adresini temsil eden uzun bir onaltılık sayı. Farklı veri türlerinin işaretçileri arasındaki tek fark, işaretçinin işaret ettiği değişken veya sabitin veri türüdür.

İşaretçiler Nasıl Kullanılır?

İşaretçilerle sık sık gerçekleştirdiğimiz birkaç önemli işlem vardır: (a) işaretçi değişkenlerini tanımlarız, (b) bir değişkenin adresini bir işaretçiye atarız ve (c) işaretçi değişkeninde depolanan adresteki değere erişiriz .

Tüm bu işlemler, işlenen tarafından belirtilen adreste bulunan değişkenin değerini döndüren tekli operatör * kullanılarak gerçekleştirilir. Aşağıdaki örnek, bu işlemlerin nasıl gerçekleştirileceğini gösterir -

package main

import "fmt"

func main() {
   var a int = 20   /* actual variable declaration */
   var ip *int      /* pointer variable declaration */

   ip = &a  /* store address of a in pointer variable*/

   fmt.Printf("Address of a variable: %x\n", &a  )

   /* address stored in pointer variable */
   fmt.Printf("Address stored in ip variable: %x\n", ip )

   /* access the value using the pointer */
   fmt.Printf("Value of *ip variable: %d\n", *ip )
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Address of var variable: 10328000
Address stored in ip variable: 10328000
Value of *ip variable: 20

Go'da Nil İşaretçileri

Go derleyicisi, atanacak tam adresinizin olmaması durumunda bir işaret değişkenine bir Nil değeri atar. Bu, değişken bildirimi sırasında yapılır. Sıfır atanan bir göstericiyenil Işaretçi.

Sıfır gösterici, birkaç standart kitaplıkta tanımlanan sıfır değerine sahip bir sabittir. Aşağıdaki programı düşünün -

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("The value of ptr is : %x\n", ptr  )
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

The value of ptr is 0

Çoğu işletim sisteminde, programların 0 adresindeki belleğe erişmesine izin verilmez, çünkü bu bellek işletim sistemi tarafından ayrılmıştır. Bununla birlikte, hafıza adresi 0'ın özel bir anlamı vardır; işaretçinin erişilebilir bir bellek konumuna işaret etmesinin amaçlanmadığını belirtir. Ancak geleneksel olarak, bir gösterici sıfır (sıfır) değerini içeriyorsa, hiçbir şeyi göstermediği varsayılır.

Bir sıfır işaretçisi olup olmadığını kontrol etmek için aşağıdaki gibi bir if ifadesi kullanabilirsiniz -

if(ptr != nil)     /* succeeds if p is not nil */
if(ptr == nil)    /* succeeds if p is null */

İşaretçilere Ayrıntılı Git

İşaretçilerin birçok ama kolay konsepti vardır ve Go programlaması için çok önemlidirler. Aşağıdaki işaretçi kavramları bir Go programcısı için açık olmalıdır:

Sr.No Konsept ve Açıklama
1 Go - İşaretçiler dizisi

Bir dizi işaretçi tutacak diziler tanımlayabilirsiniz.

2 Git - İşaretçiye işaretçi

Git, bir işaretçinin üzerinde bir işaretçiye sahip olmanızı sağlar.

3 Go'da işaretçileri işlevlere aktarma

Bir bağımsız değişkeni başvuru veya adrese göre iletmek, iletilen bağımsız değişkenin çağrılan işlev tarafından çağrılan işlevde değiştirilmesini sağlar.