GO语言基础教程12——指针
GO语言基础教程12——指针
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。
Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&
(取地址)和*
(根据地址取值)。
指针地址和指针类型
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&
字符放在变量前面对变量进行“取地址”操作。
ptr := &v
例如:
func main() { a := 10 b := &a fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc00001a078 fmt.Println(&b) // 0xc00000e018 }
指针取值
在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用*操作。
例如:
func main() { //指针取值 a := 10 b := &a c := *b // 指针取值(根据指针去内存取值) fmt.println(c) // 10 }
取地址操作符&
和取值操作符*
是一对互补操作符,&
取出地址,*
根据地址取出地址指向的值。
指针传值:
func text1(x int) { x = 100 } func text2(x *int) { *x = 100 } func main() { a := 10 text1(a) fmt.Println(a) // 10 text2(&a) fmt.Println(a) // 100 }
new
注意: 不能直接声明指针然后赋值
可以通过new()方法来进行初始化。
例如:
func main() { a = new(int) *a = 10 fmt.Println(*a) }