Go: pointer to array index expressions

วันนี้เพิ่งรู้ว่า pointer to array ก็สามารถใช้ index expressions เพื่อเข้าถึง element ของ array ที่ pointer นั้นชี้อยู่ได้

เอาจริงๆก็ไม่ค่อยได้ใช้งาน array ตรงๆอยู่แล้ว เรามักจะใช้ slice แล้วค่อยใช้ฟังก์ชันอย่าง make, append ในการจัดการ underlying arr…


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 คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

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


Print Share Comment Cite Upload Translate Updates
APA

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/

MLA
" » Go: pointer to array index expressions." Weerasak Chongnguluam | Sciencx - Sunday April 25, 2021, https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/
HARVARD
Weerasak Chongnguluam | Sciencx Sunday April 25, 2021 » Go: pointer to array index expressions., viewed ,<https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/>
VANCOUVER
Weerasak Chongnguluam | Sciencx - » Go: pointer to array index expressions. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/
CHICAGO
" » Go: pointer to array index expressions." Weerasak Chongnguluam | Sciencx - Accessed . https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/
IEEE
" » Go: pointer to array index expressions." Weerasak Chongnguluam | Sciencx [Online]. Available: https://www.scien.cx/2021/04/25/go-pointer-to-array-index-expressions/. [Accessed: ]
rf:citation
» Go: pointer to array index expressions | Weerasak Chongnguluam | Sciencx | 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.

You must be logged in to translate posts. Please log in or register.