GO切片的删除-指针与非指针的区别

  1. 非指针,删除元素,失败,并没有影响到源切片
1
2
3
4
5
6
7
8
9
10
11
12
go复制代码func TestDelOneElementFromSlice(t *testing.T) {
arr := []int{1,2,3,4}
fmt.Printf("test : %p\n",arr)
drop1(&arr)
fmt.Println(arr)
}

//非指针接收切片
func drop1(arr []int) {
fmt.Printf("drop1 : %p\n",arr)
arr = arr[:len(arr)-1]
}

运行结果:

图片.png

  1. 指针,删除元素,成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
go复制代码func TestDelOneElementFromSlice(t *testing.T) {
arr := []int{1,2,3,4}
fmt.Printf("test : %p\n",arr)
drop2(&arr)
//swap(arr)
//drop1(arr)
fmt.Println(arr)
}

func drop2(arr *[]int) {
p := *arr
*arr = p[:len(p)-1]

fmt.Printf("drop2 : %p\n",arr)
fmt.Printf("drop2 p : %p\n",p)
}

运行结果:
图片.png

  1. 交换元素,无需指针也可成功
1
2
3
4
5
6
7
8
9
10
11
12
go复制代码func TestDelOneElementFromSlice(t *testing.T) {
arr := []int{1,2,3,4}
fmt.Printf("test : %p\n",arr)
//drop2(&arr)
swap(arr)
//drop1(arr)
fmt.Println(arr)
}

func swap(arr []int) {
arr[0],arr[1] = arr[1],arr[0]
}

运行结果:

图片.png

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%