go语言有指针这一概念。
直接上代码:
func pointTest() {
var a int =3
var p *int =&a
fmt.Println(a,p,*p)
}
定义int类型的值a,并且赋值为3
定义int类型指针变量p,并且取a的地址赋值给p
输出a和p
控制台;
3 0xc00000a0a8 3
Process finished with exit code 0
a的值为3,p为a在内存中的地址 *p为指针变量中地址的值,也就是a的值 3
go中的指针不能参与运算。
参数传递:
go中的参数是值传递还是引用传递?
go语言只有值传递一种方式!
func swap(a,b int) {
a,b = b,a
}
调用:
a,b :=3,4
swap(a,b)
fmt.Println(a,b)
控制台输出:
3 4
Process finished with exit code 0
a,b的值并没有发生交换,因为参数在传递的时候重新拷贝了一份,不会影响到函数外面的a,b
如果要交换它们的值,使用指针:
func swap(a,b *int) {
*a,*b = *b,*a
}
调用:
a,b :=3,4
swap(&a,&b)
fmt.Println(a,b)
控制台:
4 3
Process finished with exit code 0
a,b的值成功的交换