和c++中指针基本相同
一、指针声明
var ptr *float32 //声明一个指向loat632类型的指针
二、指针赋值
var a int=2
var fp *int=&a
三、空指针
go默认未赋值的指针为空(nil)
四、指针数组
即数组中存放的是每个变量的指针
Q:下面这两个例子在目的上有什么区别吗?
package main
import "fmt"
const MAX int = 3
func main() {
a := []int{10,100,200}
var i int
for i = 0; i < MAX; i++ {
fmt.Printf("a[%d] = %d\n", i, a[i] )
}
}
package main
import "fmt"
const MAX int = 3
func 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] = %d\n", i,*ptr[i] )
}
}
五、利用指针改变函数实参
package main
import "fmt"
func Swap(a *int,b *int) {
tmp:=*a
*a=*b
*b=tmp
}
func main(){
a:=22
b:=33
Swap(&a,&b)
fmt.Print(a,b)