func main() {
var (
a = 1
b = "hello"
c = false
d = 1.22
)
fmt.Printf("a以值打印\t%v\n", a)
fmt.Printf("a以指针打印\t%p\n", a)
fmt.Printf("b以值打印\t%v\n", b)
fmt.Printf("b以指针打印\t%p\n", b)
fmt.Printf("c以值打印\t%v\n", c)
fmt.Printf("c以指针打印\t%p\n", c)
fmt.Printf("d以值打印\t%v\n", d)
fmt.Printf("d以指针打印\t%p\n", d)
}
// 输出
a以值打印 1
a以指针打印 %!p(int=1)
b以值打印 hello
b以指针打印 %!p(string=hello)
c以值打印 false
c以指针打印 %!p(bool=false)
d以值打印 1.22
d以指针打印 %!p(float64=1.22)
可见,这些量存储的都是值,不是指针
2. 数组、结构体结构体
type Test struct{
a int
}
func main() {
var (
a Test
b = Test{}
c = Test{a:1}
)
fmt.Printf("a以值打印\t%v\n", a)
fmt.Printf("a以指针打印\t%p\n", a)
fmt.Printf("b以值打印\t%v\n", b)
fmt.Printf("b以指针打印\t%p\n", b)
fmt.Printf("c以值打印\t%v\n", c)
fmt.Printf("c以指针打印\t%p\n", c)
}
// 输出
a以值打印 {0}
a以指针打印 %!p(main.Test={0})
b以值打印 {0}
b以指针打印 %!p(main.Test={0})
c以值打印 {1}
c以指针打印 %!p(main.Test={1})
数组
func main() {
var (
d [2]int
e = [2]int{}
f = [2]int{1,2}
)
fmt.Printf("d以值打印\t%v\n", d)
fmt.Printf("d以指针打印\t%p\n", d)
fmt.Printf("e以值打印\t%v\n", e)
fmt.Printf("e以指针打印\t%p\n", e)
fmt.Printf("f以值打印\t%v\n", f)
fmt.Printf("f以指针打印\t%p\n", f)
}
// 输出
d以值打印 [0 0]
d以指针打印 %!p([2]int=[0 0])
e以值打印 [0 0]
e以指针打印 %!p([2]int=[0 0])
f以值打印 [1 2]
f以指针打印 %!p([2]int=[1 2])
可见,数组和结构体存储的都是值,是类型实体对象
3. Map、Slice、Channel、指针func main() {
var (
a []int
b map[int]int
c chan int
d = []int{1,2}
e = map[int]int{0:1,1:2}
f = make(chan int,1)
)
fmt.Printf("a以值打印\t%v\n", a)
fmt.Printf("a以指针打印\t%p\n", a)
fmt.Printf("b以值打印\t%v\n", b)
fmt.Printf("b以指针打印\t%p\n", b)
fmt.Printf("c以值打印\t%v\n", c)
fmt.Printf("c以指针打印\t%p\n", c)
fmt.Printf("d以值打印\t%v\n", d)
fmt.Printf("d以指针打印\t%p\n", d)
fmt.Printf("e以值打印\t%v\n", e)
fmt.Printf("e以指针打印\t%p\n", e)
fmt.Printf("f以值打印\t%v\n", f)
fmt.Printf("f以指针打印\t%p\n", f)
}
// 输出
a以值打印 []
a以指针打印 0x0 // nil
b以值打印 map[]
b以指针打印 0x0 // nil
c以值打印
c以指针打印 0x0 // nil
d以值打印 [1 2]
d以指针打印 0xc00001a040
e以值打印 map[0:1 1:2]
e以指针打印 0xc000052150
f以值打印 0xc000046070
f以指针打印 0xc000046070
可见,map、channel、slice存的都是指针,未初始化时它们都是nil
值类型变量存储的都是值,引用类型变量存储的都是指针
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)