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

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

Susan Sarandon
發布: 2024-12-15 17:50:14
原創
333 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板