الأساسيات

المؤشرات Pointers

– ماهي المؤشرات Pointers ؟

المؤشر هو متغير حيث يتم حفظ عنوان الذاكرة Memory Address الخاص بمتغير آخر.

في الصورة السابقة نجد أن المتغير b له قيمة عددية تساوي 156 مخزنة في عنوان الذاكرة 0x1040a124
والمتغير a مخزن فيه عنوان ذاكرة المتغير b, عندها نقول أن a مؤشر لـ b .

– إعلان المؤشرات

بالنسبة لنوع بيانات المؤشر فهو يكون أحد أنواع البيانات التي تعرفنا عليها سابقاً ولكن مسبوقاً برمز النجمة *

مثال

package main

import (  
    "fmt"
)

func main() {  
    b := 255
    var a *int = &b
    fmt.Printf("Type of a is %T\n", a)
    fmt.Println("address of b is", a)
}

معامل & يتم استخدامه لجلب عنوان ذاكرة متغير ما.

في السطر التاسع من المثال السابق قمنا بإسناد عنوان المتغير b للمتغير a ذو نوع البيانات *int
والان يُقال الان أن a يشير إلى b
عندما نقوم بطباعة قيمة a سيتم طباعة عنوان ذاكرة المتغير b , والنتيجة ستكون

Type of a is *int  
address of b is 0x1040a124

وبالطبع قد تحصل على قيمة مختلفة كعنوان الذاكرة.

– تمرير مؤشر إلى دالة

مثال

package main

import (  
    "fmt"
)

func change(val *int) {  
    *val = 55
}
func main() {  
    a := 58
    fmt.Println("value of a before function call is",a)
    b := &a
    change(b)
    fmt.Println("value of a after function call is", a)
}

في المثال السابق, في السطر الرابع عشر مررنا مؤشر المتغير b الذي يحمل قيمة عنوان الذاكرة للمتغير a الى الدالة change
داخل دالة change يتم تغيير قيمة a في السطر الثامن والنتيجة ستكون

value of a before function call is 58  
value of a after function call is 55

وفي الرابط التالي يوجد برنامج بسيط متكامل عن المؤشرات والأمثلة عليها
https://github.com/argolang/pointers

ملاحظة: يمكنك تشغيل أكواد وأمثلة لغة غو من خلال GoLang Playground أو GoPlay.Space .

نبذة عن الكاتب

Firas M. Darwish

Software Engineer, PHP/Laravel, C#, GoLang, founder of ArGoLang.com & others ..

شاركنا رأيك :)