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 }