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
}

浙公网安备 33010602011771号