什么是指针
记得当时学习C语言的时候,提到指正就头疼,因为搞不懂各种传值传址,还有指针的运算,学了java语言,没有指针类型,只有基本数据类型和引用类型,我理解为基本数据类型是传值,引用类型是传址,因为对象类型最终传递后是指向堆内存的同一块区域。那什么是指针呢?我理解的就是指向内存区域的一种特殊类型变量。
Go语言中的指针
go语言中的指针相比于C语言中的指针,简单了很多,Go语言中的指针不能参与运算,Go语言中不论是普通类型变量,还是指针类型变量,都是值传递,只不过一个值传递的拷贝一份的变量,另一个传递的是内存地址,下面,用简单的例子来解释下:
经典的交换两个数字
func swap1(a, b int) {
a, b = b, a
}
测试方法:
func main() {
a := 1
b := 2
swap1(a, b)
fmt.Println(a, b)
}
运行结果:
怎么才能达到交换两个数值的效果呢?这里采用指针可以将两个值真正的交换:
func swap2(a, b *int) {
*a, *b = *b, *a
}
语法说明:
对任何一个变量都可以提取指针:a int 的指针:&a 这样得到的是变量a的地址
用来接收或者传递的形式参数:*a ,可以得到变量a的真正的值。