首頁 >後端開發 >Golang >Go中如何正確地給int指標賦值?

Go中如何正確地給int指標賦值?

Susan Sarandon
Susan Sarandon原創
2024-12-15 17:50:14335瀏覽

How to Correctly Assign a Value to an Int Pointer in Go?

在 Go 中將 Int 指標設定為 Int 值

在 Go 中,一個常見的任務是為 int 指標賦值。然而,最近在程式碼片段中發現的錯誤揭示了一個潛在的陷阱:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var guess *int
    fmt.Println(reflect.TypeOf(guess))
    *guess = 12345
    fmt.Println(guess)
}

執行此程式碼時,出現以下錯誤:

Type: *int
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x483c7d]

goroutine 1 [running]:
main.main()
    /home/aaron/projects/gopath/src/github.com/AaronNBrock/go-guess/main.go:16 +0x9d
exit status 2

根本原因在於事實上,指針的猜測最初被設定為nil。取消引用 nil 指標會引發執行時期錯誤,如錯誤訊息中所示。解決方案在於在嘗試為指標賦值之前為其分配記憶體:

var guess *int
guess = new(int)
*guess = 12345

此修改可確保猜測指向有效的記憶體位置,從而允許我們設定和檢索其值。

或者,使用簡短的變數宣告可以簡化程式碼:

guess := new(int)
*guess = 12345

另一種方法是將現有變數的位址分配給指標:

value := 12345 // will be of type int
guess := &value

此解決方案將猜測指向現有變量,而不是分配新記憶體。更改指向的值也會修改原始變數的值。

最後,請記住,將指標指向一個位置和為其賦值是不同的操作。前者分配記憶體或將指標設為現有變量,而後者則修改儲存在指向位置的值。

以上是Go中如何正確地給int指標賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn