Go之路(四):值类型和引用类型

 

值类型和引用类型

简单来说值类型就是直接存值的,而引用类型是存的内存地址

下面的例子可以直接验证这个

值类型有int float boolean 数组等

引用类型slice mao chan 指针

package main

import(
	"fmt"
)

func main()  {
	a := 10
	b := make(chan int,3)
	fmt.Println(a,b)
}

  输出结果

 

这个例子可以改进一下

例如:

package main

import(
	"fmt"
)

func modify(a int){
	a = 5
}

func main()  {
	a := 10
	b := make(chan int,3)
	fmt.Println(a,b)

	modify(a)
	fmt.Println|(a)
}

  输出结果

a的值仍然是10,这是因为传递的是真实的值,所以会进行一份拷贝的数据,修改的只是拷贝的数据,不会改变原有值

那么这样改呢

package main

import(
	"fmt"
)

func modify(a *int){
	*a = 5
	
}

func main()  {
	a := 10
	b := make(chan int,3)
	fmt.Println(a,b)

	modify(&a)
	fmt.Println(a)
}

  输出结果a 是5 

因为&是取值符号,得到某个变量的地址

*代表指针运算符,指向某个对象的存储单元,

&符号的意思是对变量取地址,如:变量a的地址是&a
*符号的意思是对指针取值,如:*&a,就是a变量所在地址的值,当然也就是a的值了

 

练习2:

交换值

package main

import(
	"fmt"
)


func main()  {
	var a = 10
	var b = 5


	exchange(&a, &b)
	fmt.Println(a,b)
}

func exchange(a *int, b *int){
	
	c := *a
	*a = *b
	*b = c
}

  

posted @ 2018-11-30 13:23  __Miracle  阅读(183)  评论(0编辑  收藏  举报