這個問題在這里已經有了答案: Go 的指標什么時候取消參考自己 1 個答案 為什么我們需要使用 * 來修改基本資料型別的值而不是用戶定義的結構? (2 個回答) 默認情況下,指標是否在方法內部取消參考? (2 個回答) Go 中指向結構或陣列值的指標如何作業? (1 個回答) 指標運算子-> for golang 4 個答案 3天前關閉。
我一直堅持理解指標的語法。這是我的代碼:
package main
import "fmt"
type t struct{
item int
}
func main(){
x_struct := t{item:10}
x_normal := 10;
test(&x_normal, &x_struct)
}
func test(x_normal *int, x_struct *t){
fmt.Println(*x_normal, x_struct.item) // focus on this part
}
當我執行go run main.go它時,它會正確運行并列印10 10. 好的,我們已經通過test地址(使用&)將兩個引數傳遞給函式。我列印了*x_normal變數(通過使用*前綴。但令人驚訝的是,訪問*x_struct.item會引發以下錯誤:
無效操作:不能間接 x_struct.item(int 型別的變數)
我需要洗掉它*以使其作業。有趣的是,當我洗掉*它按預期作業時,它仍然是一個指標。
為什么?為什么我應該*使用它來獲取變數的內容而不是使用它來獲取strcut的內容?
uj5u.com熱心網友回復:
在函式test中,x_struct是一個指標,您可以使用 訪問專案(*x_struct).item。Go 編譯器提供了快捷方式x_struct.item。
*x_struct.item無效,因為重定向適用x_struct.item于這種情況,它不是指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470312.html
上一篇:重新正則運算式操作,去掉句號?
