其他分享
首页 > 其他分享> > 8.25Go之容器之切片复制

8.25Go之容器之切片复制

作者:互联网

8.25Go之容器之切片复制

内置函数copy()

特点:

copy()函数声明格式:

copy( destSlice, srcSlice []T) int

copy()函数复制数组的实例:

package main

import "fmt"

func main() {
/*声明两个数组切片*/
slice1 := []int{1,2,3,4,5}
slice2 := []int{7,8,9}

/*使用copy函数对他们的元素进行操作*/
copy(slice1, slice2)
slice1[0] = 1
slice1[1] = 2
slice1[2] = 3
copy(slice2, slice1) //这个已经改变了数组当中的元素--->copy函数

fmt.Println(slice1)
fmt.Println(slice2)
}

copy() 函数的第一个参数是要复制的目标 slice,第二个参数是源 slice,两个 slice 可以共享同一个底层数组

切片引用和复制再内存层面上的影响

package main

import "fmt"

func main() {
//设置元素数量
const elementNumbers = 1000

//使用make()方法预分配足够多的切片
srcData := make([]int, elementNumbers)

//将数组赋值
for i := 0; i < elementNumbers; i++ {
srcData[i] = i+1
}

//打印出切片来看看
//for i, j := range srcData {
// fmt.Printf("第%d号索引的值是%d\n", i, j)
//}

//引用切片数据
refData := srcData

//使用make预分配切片
copyData := make([]int, elementNumbers)

//使用copy内置函数复制src给copy
copy(copyData, srcData)

//修改第一个元素
srcData[0] = 999

srcData[1] = 888

//打印引用切片的第一个元素
fmt.Println(refData[1])

copyData[0] = 777

//打印第一个和最后一个元素
fmt.Println(copyData[0], copyData[elementNumbers-1])

srcData[4] = 444

srcData[5] = 666

// 复制原始数据从4到6(不包含)
copy(copyData, srcData[4:6])

for i := 0; i < 5; i++ {
fmt.Printf("%d", copyData[i])
}
/*
       引用的话源切片和目的切片的内存地址指向的连续内存区域是一样的
       改变源切片的元素目的切片也会对应的改变
       复制的话原切片和目的切片的内存地址指向的连续内存区域是不一样的
       复制是新开辟出一块区域
*/
}

 

标签:srcData,fmt,切片,8.25,复制,copyData,Go,copy
来源: https://www.cnblogs.com/JunkingBoy/p/15187941.html