Update golang_tutorial_15.md

pull/17/head
RickyWang1020 5 years ago committed by GitHub
parent 4110f71ad2
commit b564ef82b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -67,3 +67,92 @@ func main() {
}
```
'b' 首先被初始化为 `nil`,之后被赋值为 `a` 的地址,程序输出为:
```golang
b is <nil>
b after initialization is 0x1040a124
```
## 利用 `new` 函数创建指针
Go 还提供一个实用的函数 `new` 来创建指针。`new` 函数接收一个类型,并返回一个该类型的空值指针。
我们来看一个实例:
```golang
package main
import (
"fmt"
)
func main() {
size := new(int)
fmt.Printf("Size value is %d, type is %T, address is %v\n", *size, size, size)
*size = 85
fmt.Println("New size value is", *size)
}
```
上面的程序中,我们在第 8 行利用 `new` 函数创建了一个指向 `int` 类型的指针。由于 `int` 类型的空值为 `0`,变量 `size` 是一个指向 `0` 的整数指针(`*int` 类型)。
程序输出:
```golang
Size value is 0, type is *int, address is 0x414020
New size value is 85
```
## 指针的间接引用
间接引用dereference指针就是获取指针所指向的变量的值。间接引用 `a` 的语句是 `*a`。例如:
```golang
package main
import (
"fmt"
)
func main() {
b := 255
a := &b
fmt.Println("address of b is", a)
fmt.Println("value of b is", *a)
}
```
在第 10 行,我们间接引用了 `a` 并打印了它的值,也就是 `b` 的值。程序输出为:
```golang
address of b is 0x1040a124
value of b is 255
```
我们再编写一个利用指针改变变量 `b` 的值的程序:
```golang
package main
import (
"fmt"
)
func main() {
b := 255
a := &b
fmt.Println("address of b is", a)
fmt.Println("value of b is", *a)
*a++
fmt.Println("new value of b is", b)
}
```
在第 12 行,我们将 `a` 所指向的值加上了 1也就是改变了 `b` 的值(因为 `a` 指向 `b`)。因此 `b` 变成了256程序输出
```golang
address of b is 0x1040a124
value of b is 255
new value of b is 256
```

Loading…
Cancel
Save