This content originally appeared on DEV Community and was authored by Weerasak Chongnguluam
วันนี้เพิ่งรู้ว่า pointer to array ก็สามารถใช้ index expressions เพื่อเข้าถึง element ของ array ที่ pointer นั้นชี้อยู่ได้
เอาจริงๆก็ไม่ค่อยได้ใช้งาน array ตรงๆอยู่แล้ว เรามักจะใช้ slice แล้วค่อยใช้ฟังก์ชันอย่าง make, append ในการจัดการ underlying array ให้เราเอง แต่ก็รู้ไว้สักหน่อยก็ไม่เป็นไร :D
ตัวอย่าง pointer to array เช่น
package main
import (
"fmt"
)
func main() {
arr := [4]int{1, 2, 3, 4}
ptrToArr := &arr
fmt.Printf("%T\n", ptrToArr)
}
เมื่อสั่งรันก็จะได้ type ของ ptrToArr ออกมาแบบนี้
$ go run main.go
*[4]int
ทีนี้ถ้าเราต้องการเข้าถึง element ของ arr
ผ่าน ptrToArr
แบบแรกถึงใช้ operator pointer indirect *
เพื่อเข้าถึง arr
ก่อนแล้วค่อยใช้ []
แบบนี้
fmt.Println((*ptrToArr)[0])
fmt.Println((*ptrToArr)[1])
fmt.Println((*ptrToArr)[2])
fmt.Println((*ptrToArr)[3])
จะเห็นว่าเราต้องใช้ วงเล็บ ครอบ *ptrToArr
ไม่งั้นมันจะถูกตีความเป็น (ptrToArr[0]) ซึ่งจะ compile ไม่ผ่านเพราะเหมือนไปใช้ `` กับค่าที่เก็บใน element ที่ 0 ซึ่งไม่ใช้ pointer
ท่าต่อไปคือ Go สำหรับ pointer to array Go ยอมให้ใช้ indexing expressions ได้เลยไม่ต้องใช้ pointer indirect *
ก่อน ดังนั้นจากตัวอย่างเมื่อกี้เราเลยเขียนให้เหลือแค่นี้ได้
fmt.Println(ptrToArr[0])
fmt.Println(ptrToArr[1])
fmt.Println(ptrToArr[2])
fmt.Println(ptrToArr[3])
และใช้กับ for range ได้เหมือนกับ array, slice ได้เช่นกัน
for _, v := range ptrToArr {
fmt.Println(v)
}
และแน่นอนว่ามันเข้าถึง element ของ array ที่มันชี้อยู่ ทำให้แก้ไขค่าของ index นั้นได้เช่นกัน
for i := range ptrToArr {
ptrToArr[i] *= 2
}
for _, v := range arr {
fmt.Println(v)
}
เมื่อรันก็จะได้
$ go run main.go
2
4
6
8
ขอฝาก Buy Me a Coffee
สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง Buy Me a Coffee คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ
ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ Paypal สามารถสนับสนุนผมได้ผ่านทาง PromptPay โดยดู QR Code ได้จากโพสต์ที่พินเอาไว้ได้ที่ Page DevDose ครับ https://web.facebook.com/devdoseth
ขอบคุณครับ ?
This content originally appeared on DEV Community and was authored by Weerasak Chongnguluam
Weerasak Chongnguluam | Sciencx (2021-04-25T15:30:47+00:00) Go: pointer to array index expressions. Retrieved from https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.