變數和記憶體位址
1.每個變數都有記憶體位址,可以說通過變數來操作對應大小的記憶體,&符號可以獲取變數的位址
1: var a int32
2: a = 100
3: fmt.printf("%d\n", a)
4: fmt.printf("%p\n", &a)
1: >>> 100
2: 0xc00004a058
2.普通變數儲存的是對應型別的值,這些型別就叫值型別。指標型別儲存的是乙個位址,又叫引用型別
1: var b int32 =156
2: fmt.printf("%d\n", b)
3: fmt.printf("%p\n", &b)
4: var c *int32 = &b
5: var d *int //沒有初始化列印出來是nil
6: fmt.printf("%p\n", c)
7: fmt.printf("%v\n", d)
1: >>> 156
2: 0xc00004a058
3: 0xc00004a058
4:
指標型別變數的預設值為nil,也就是空位址
1: package main
2: import (
3: "fmt"
4: )
5: func main()
13: }
3.操作指標變數指向的位址裡面的值
通過*符號可以獲取指標變數指向的變數,還可以通過指標修改變數的值。
1: package main
2: import (
3: "fmt"
4: )
5: func main()
1: >>> address of b is 0xc000010090
2: value of b is 255
3: new value of b is 1000
4.指標變數傳參
兩個例子
1: package main
2: import (
3: "fmt"
4: )
5: func change(val *int)
8: func main()
1: package main
2: import (
3: "fmt"
4: )
5: func modify(arr *[3]int)
8: func main()
10: modify(&a)
11: fmt.println(a)
12: }
關於值拷貝和引用拷貝,看下面的例子
1: package main
2: import (
3: "fmt"
4: )
5: func swap(a int, b int)
10: func main()
列印結果,發現main函式裡面的ab的值沒有改變
1: >>> before a=10 b=20
2: after a=20 b=10
3: in main_def a=10 b=20
如果**稍改下
1: package main
2: import (
3: "fmt"
4: )
5: func swap(a *int, b *int)
10: func main()
結果就發生了改變
1: >>> before a=10 b=20
2: after a=20 b=10
3: in main_def a=20 b=10
Go語言學習十一 go語言切片
go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。你可以宣告乙個未指定大小的陣列來定義切片 var identifier typ...
GO語言學習 指標
指標 var str hello p str fmt.println p 輸出 0xc0000881e0實現的操作就是 把變數str的記憶體位址 放入到p變數中 指標取值var str hello p str z p fmt.println z 輸出 hellodemo func main func...
Go語言學習九 Go語言指標
go 語言中指標是很容易學習的,go 語言中使用指標可以更簡單的執行一些任務。接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。package main import f...