Golang 中的指针类型
[TOC]
1. 基本的指针声明以及使用
可以使用*T
声明一个类型是T 的指针,指针类型用于存储某个变量的地址,使用*
操作符可以解引用,获取指针的值,注意golang中的指针不支持指针下移操作,即不支持ptr++
.
对于一个声明后但是没有指明其值的指针为空指针nil
b := 255
var a *int = &b
fmt.Printf("Type of a is %T\n", a)
fmt.Println("address of b is", a)
a := 25
var b *int
if b == nil {
fmt.Println("b is", b)
b = &a
fmt.Println("b after initialization is", b)
}
2,使用指针类型作为参数传递
注意golang中一般不使用指针类型作为函数的参数进行传递,而是使用切片类型代替。例如需要更改一个数组的值,可以使用传入一个数组的指针类型,使得内部的数组对于外界是可见的。但是这种方式不符合go的基本思想;使用slice代替
func ch1(ptr *[3]int) {
ptr[0] = 30
}
func ch2(arr []int) {
arr[0] = 12
}
func main() {
a := [3]int{1, 2, 3}
ch1(&a)
ch2(a[:])
}
使用数组指针时,对于元素的访问需要解引用,也就是使用*
对于数组元素进行访问。但是可以使用较为简短的语法,直接使用ptr[i]
对于指针所指向数组的第i个元素进行访问。(*ptr)[i]-->ptr[i]
Last updated
Was this helpful?