Accessing structure's element using Pointers
ธามนิธิศ ธนะสุข 650710555
เนื้อหาต่อไปนี้จะกล่าวถึง การเข้าถึง ตัวแปรต่างๆใน structure โดนใช้ pointers
ก่อนที่เราจะมาพูดถึงเรื่อง การ acess เข้า structure นั้นเรามาทำความรู้จักอีก 1 ตัวละครสำคัญในการที่จะทำให้เรานั้น สามารถใช้ pointer ได้ใน C# กันดี คนๆนั้นก็คือ...
Unsafe
โดยทั่วไปแล้วการเขียน code ใน C# จะเป็น code ที่ได้รับการ verify จากทาง .NET แล้วว่าเป็น code ที่ปลอดภัย โดยปลอดภัยในที่นี้นั้นหมายถึง จะไม่มีการเข้าไปยุ่งเกี่ยวกับตัวหน่วยความจำโดยตรง โดยใช้ตัว pointer แต่จะเป็นการ สร้างตัว object มาจัดการ unsafe code ไม่ได้หมายความว่าเป็น code ที่เป็นอันตรายเสมอไป เป็นเพียงแค่ ไม่สารถตรวจสอบความปลอดภัยโดย .NET ได้ ดังนั้นแล้วการจะใช้ pointer เพื่อไปยุ่งเกี่ยวกับหน่วยความจำโดยตรงแล้ว จึงจำเป็นต้องมีการใช้งาน keyword unsafe ใน code ก่อน
Pointer
pointer หรือ ตัวชี้ คือ ตัวแปรที่เก็บค่า address ของข้อมูล และ ตัวแปรต่างๆ ในภาษา C# Pointer ถือเป็น data type แบบที่สาม (สองแบบแรกคือ value type และ reference type) pointer คือตัวแปรที่เราใช้งานได้ภายในบล็อก unsafe เท่านั้น

การ Acess เข้า Structure โดยใช้ pointers
การเข้าถึง structure ในภาษา C# โดยใช้ pointers นั้นสามารถทำได้หลักๆ 2 วิธี
1 ) การใช้ Arrow operator
Syntax:
Example:
คำอธิบายตัวอย่าง : ใน code นี้จะมีการสร้าง struct Coordinate ขึ้นมาโดยมีฟิลด์ x , y ในบรรทัดที่ 20 นั้นจะมีการเปิดใช้งาน unsafe เพื่อใช้งาน pointer ในการเข้าถึงและจัดการกับหน่วยความจำ ตัวของ pointer จะถูกสร้างขึ้นมาในบรรทัดที่ 25,26 ส่วนบรรทัดที่ 31 และ 35 คือ syntax การใช้งาน pointer แบบ Arrow operator
นี่คือ code แบบที่ไม่ใช้ pointer
2 ) การใช้ Dereferencing operator
Syntax:
Example:
คำอธิบายตัวอย่าง : ใน code นี้จะมีการสร้าง struct Coordinate ขึ้นมาโดยมีฟิลด์ x , y ในบรรทัดที่ 14 นั้นจะมีการเปิดใช้งาน unsafe เพื่อใช้งาน pointer ในการเข้าถึงและจัดการกับหน่วยความจำ ตัวของ pointer จะถูกสร้างขึ้นมาในบรรทัดที่ 17 ในส่วนของบรรทัดที่ 19,20 จะการใช้งาน pointer เพื่อเข้าถึงตัวแปร x กับ y ส่วนบรรทัดที่ 25 คือ syntax การใช้งาน pointer แบบ Dereferencing operator
นี่คือ code แบบที่ไม่ใช้ pointer
เปรียบเทียบการใช้ Pointers ในการเข้าถึง Structer ของ C# กับภาษาต่าง ๆ
การใช้ pointer ใน C นั้นไม่จำเป็นต้องใข้ unsafe รูปแบบที่ใช้จะเป็นแบบ arrow operator
ในส่วนของ Java นั้น ในตัว Java นั้นไม่มี concept ของ pointer การติดต่อกันและการเข้าถึง จะทำโดยผ่าน object กับ object การจำการเรื่องหน่วยความจำของ Java นั้นจะทำแบบ auto โดย Garbage collection แต่เราก็สามารถใช้สิ่งที่จะสามารถเรียกว่า pointer ใน java ได้ สามารถศึกษาเพิ่มเติมได้ที่นี่
ใน python ก็ไม่มี pointer เช่นกัน โดยเราจะทำการเข้าถึงฟิลด์โดยทำงาน object โดยตรง โดยที่ไม่ต้องใช้ pointer หรือ dereferencing operator
Presentation:
Video:
Reference
ตัวแปร และตัวแปรแบบ pointer ในภาษา C# : ลาภลอย วานิชอังกูร. (2013). เรียนรู้ด้วยตนเอง OOP C# ASP.NET. กรุงเทพฯ : ซีเอ็ดยูเคชั่น. (ISBN(e-book) : 978-616-08-0678-2). thaioop
Accessing Structure Member Using Structure Pointer In C: Muskaan Mishra. (n.d.). Structure Pointer In C | Declare, Initialize & Uses (+Examples) [unstop]. unstop
Kasem Arnontavilas. (Jun 26, 2017). ทบทวนเคล็ดวิชา Pointer ให้นูบ [Medium]. Medium
Operators and expressions. (2021, April 12). Pointer related operators [Microsoft Learn]. Microsoft Learn
manasikirloskar. (2019,26 Feb). How to access structure elements using Pointers in C# [GeeksforGeeks]. GeeksforGeeks
Unsafe code and pointers. (2021, Sep 29). Unsafe code, pointer types, and function pointers [Microsoft Learn]. Microsoft Learn
Pointers in C. (n.d.).C Programming Tutorial [tutorialspoint]. tutorialspoint
Logan Jones. (2019,26 Feb). Pointers in Python: What's the Point? [Real Python]. Real Python
Somesh. (2023,25 Jun). Pointers In Java [Medium]. Medium
Last updated