1、定义:指针也叫指针变量,存储一个变量的地址。两个符号:& 取一个变量地址;* 取一个指针变量所指向的地址的值
package main import ( "fmt" ) func main() { var x int var x_ptr *int x = 10 x_ptr = &x fmt.Println(x) fmt.Println(x_ptr) fmt.Println(*x_ptr) }
结果图
&符号是取变量地址,*符号是取地址指向的值;一个普通的变量,不是指针变量的话,只能使用&符号取到地址,而不能使用*符号
&符号和*符号是可以相互抵消的,示例代码如下
package main import ( "fmt" ) func main() { var x int var x_ptr *int x = 10 x_ptr = &x fmt.Println(x) //输出x的值 fmt.Println(&x_ptr) //输出x_ptr的地址 fmt.Println(*x_ptr) //输出x_ptr指向的值 fmt.Println(x_ptr) //输出x的地址 fmt.Println(*&x_ptr) //*和&可以相互抵消 fmt.Println(&*x_ptr) fmt.Println(&x) fmt.Println(*&x) }
结果图
2、用途:作为实参传入函数,改变原来变量的值
package main import ( "fmt" ) func change(x *int) { *x = 200 } func main() { var x int = 100 fmt.Println(x) change(&x) fmt.Println(x) }
结果图
3、使用new关键字创建一个指针
package main import ( "fmt" ) func set_value(x_ptr *int) { *x_ptr = 100 } func main() { //使用new创建一个指针 x_ptr := new(int) //将指针指向某值的地址 set_value(x_ptr) //打印该指针指向的地址 fmt.Println(x_ptr) //打印指针所在地址 fmt.Println(&x_ptr) //打印指针指向地址的值 fmt.Println(*x_ptr) }
结果图
4、交换两个变量值示例
package main import ( "fmt" ) func swap(x, y *int) { *x, *y = *y, *x } func main() { x_val := 100 y_val := 200 swap(&x_val, &y_val) fmt.Println(x_val) fmt.Println(y_val) }
结果图