Go語言學習筆記 十一 之指標

2022-08-16 19:09:10 字數 2125 閱讀 3549

變數和記憶體位址

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...