一、定义:指针也叫指针变量,存储一个变量的地址。两个符号:& 取一个变量地址;* 取一个指针变量所指向的地址的值函数
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) }
结果图spa
&符号是取变量地址,*符号是取地址指向的值;一个普通的变量,不是指针变量的话,只能使用&符号取到地址,而不能使用*符号指针
&符号和*符号是能够相互抵消的,示例代码以下code
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) }
结果图blog
二、用途:做为实参传入函数,改变原来变量的值class
package main import ( "fmt" ) func change(x *int) { *x = 200 } func main() { var x int = 100 fmt.Println(x) change(&x) fmt.Println(x) }
结果图import
三、使用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) }
结果图im
四、交换两个变量值示例img
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) }
结果图