Go:值类型、引用类型

值类型,变量存的就是值本身:

  in系列t、float系列、bool、string、数组和struct

引用类型,变量存的是一个地址,这是地址存的才是值本身:

  指针、slice、map、chan、interface

获取变量的地址,使用 &,比如: var a int,使用 &a 获取变量a的地址。

获取指针所指向的值,使用 *,比如:var *p int,使用 *p 获取p指向的值,使用 &p 获取指针p的地址。

package main

import "fmt"

// 方式1:交换两个变量的值
func swap1(a, b *int) {
	*a, *b = *b, *a
}

// 方式2:交换两个变量的值
func swap2(a, b int) (int, int) {
	return b, a
}

func main() {
	var i int = 10
	var p *int = &i // *int代表指针,&a代表获取a的地址
	*p = 20			// 给指针所指向的值赋值
	fmt.Println(i)  // 20

	a, b := 11, 22
	swap1(&a, &b)
	fmt.Println(a, b) // 22 11

	c, d := 33, 44
	c, d = swap2(c, d)
	fmt.Println(c, d) // 44 33
}

更多演示:

package main

import "fmt"

func main() {
	var i int
	i = 10
	fmt.Printf("i的地址:%p\n", &i)

	var pointer *int
	pointer = &i
	fmt.Printf("pointer是一个指针变量:%v\n", pointer)
	fmt.Printf("pointer的地址:%p\n", &pointer)
	fmt.Printf("pointer指向的值:%v\n", *pointer)
}
// 输出结果:
// i的地址:0xc00000a0c8
// pointer是一个指针变量:0xc00000a0c8
// pointer的地址:0xc000006030
// pointer指向的值:10

 

posted @ 2019-05-12 00:44  就俗人一个  阅读(343)  评论(0编辑  收藏  举报