1.1 获取指针的值
获取一个指针意味着访问指针指向的变量的值。语法是:*a
示例代码:
package main import ( "fmt")func main() { b := 255 a := &b fmt.Println("address of b is", a) fmt.Println("value of b is", *a)}1.2 操作指针改变变量的数值
示例代码:
package mainimport ( "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)}运行结果
address of b is 0x1040a124 value of b is 255 new value of b is 256
1.3 使用指针传递函数的参数
示例代码
package mainimport ( "fmt")func change(val *int) { *val = 55}func main() { a := 58 fmt.Println("value of a before function call is",a) b := &a change(b) fmt.Println("value of a after function call is", a)}运行结果
value of a before function call is 58 value of a after function call is 55
不要将一个指向数组的指针传递给函数。使用切片。
假设我们想对函数内的数组进行一些修改,并且对调用者可以看到函数内的数组所做的更改。一种方法是将一个指向数组的指针传递给函数。
package mainimport ( "fmt")func modify(arr *[3]int) { (*arr)[0] = 90}func main() { a := [3]int{89, 90, 91} modify(&a) fmt.Println(a)}运行结果
[90 90 91]
示例代码:
package mainimport ( "fmt")func modify(arr *[3]int) { arr[0] = 90}func main() { a := [3]int{89, 90, 91} modify(&a) fmt.Println(a)}运行结果
[90 90 91]
虽然将指针传递给一个数组作为函数的参数并对其进行修改,但这并不是实现这一目标的惯用方法。我们有切片。
示例代码:
package mainimport ( "fmt")func modify(sls []int) { sls[0] = 90}func main() { a := [3]int{89, 90, 91} modify(a[:]) fmt.Println(a)}运行结果:
[90 90 91]
Go不支持指针算法。
package main
func main() {
b := […]int{109, 110, 111}
p := &b
p++
}nvalid operation: p++ (non-numeric type *[3]int)
指针数组
package mainimport "fmt"const MAX int = 3func main() { a := []int{10,100,200} var i int for i = 0; i < MAX; i++ { fmt.Printf("a[%d] = %dn", i, a[i] ) }}结果
a[0] = 10a[1] = 100a[2] = 200
有一种情况,我们可能需要保存数组,这样我们就需要使用到指针。
package mainimport "fmt"const MAX int = 3func main() { a := []int{10,100,200} var i int var ptr [MAX]*int; for i = 0; i < MAX; i++ { ptr[i] = &a[i] } for i = 0; i < MAX; i++ { fmt.Printf("a[%d] = %dn", i,*ptr[i] ) }}结果
a[0] = 10a[1] = 100a[2] = 200



