Browse Source

slice切割测试是引用,用切割前后的slice地址证明

tangs 5 years ago
parent
commit
d47a551c17
1 changed files with 15 additions and 8 deletions
  1. 15 8
      go_slice/main.go

+ 15 - 8
go_slice/main.go

@@ -11,7 +11,7 @@ package main
 import "fmt"
 
 func main() {
-	var ary = make([]int, 1, 1)
+	var ary = make([]int32, 1, 1)
 	var strAry []string
 
 	ary[0] = 1
@@ -31,7 +31,7 @@ func main() {
 
 	fmt.Println("-----------------------------------------")
 
-	ary = make([]int, 3, 3)
+	ary = make([]int32, 3, 3)
 	fmt.Printf("value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
 
 	strAry = make([]string, 3, 3)
@@ -39,33 +39,40 @@ func main() {
 
 	fmt.Println("-----------------------------------------")
 
-	var subAry []int
+	var subAry []int32
 
-	ary = make([]int, 5, 5)
+	// int32占用四个字节, 所以ary, subAry的地址应该也差4
+	ary = make([]int32, 0, 5)
+	subAry = ary[1:3]
+	fmt.Printf("ary addr: %p, subAry addr: %p\n", ary, subAry)
+
+	fmt.Println("-----------------------------------------")
+
+	ary = make([]int32, 5, 5)
 	subAry = ary[1:4]
 	subAry[0] = 1
 	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
 	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
 
-	ary = make([]int, 10, 10)
+	ary = make([]int32, 10, 10)
 	subAry = ary[1:4]
 	subAry[0] = 1
 	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
 	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
 
-	ary = make([]int, 10, 10)
+	ary = make([]int32, 10, 10)
 	subAry = ary[0:1]
 	subAry[0] = 1
 	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
 	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
 
-	ary = make([]int, 10, 10)
+	ary = make([]int32, 10, 10)
 	subAry = ary[4:5]
 	subAry[0] = 1
 	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))
 	fmt.Printf("subAry value: %v, len: %v, cap: %v\n", subAry, len(subAry), cap(subAry))
 
-	ary = make([]int, 10, 10)
+	ary = make([]int32, 10, 10)
 	subAry = ary
 	subAry[0] = 1
 	fmt.Printf("ary value: %v, len: %v, cap: %v\n", ary, len(ary), cap(ary))