Golang 中 数组 与 切片 的区别主要体现在以下几点:
切片是指针类型,数组是值类型
package main
import (
"fmt"
)
func changeSlice(slice []int){
for i, value := range slice{
slice[i] += value
}
}
func changeArr(slice [6]int){
for i, value := range slice{
slice[i] += value
}
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
//切片是指针类型,数组是值类型
number1 := []int{1, 2, 3, 4, 5, 6}
changeSlice(number1)
fmt.Println(number1)
numbers2 := [...]int{1, 2, 3, 4, 5, 6}
changeArr(numbers2)
fmt.Println(numbers2)
}
程序运行后,控制台输出如下:
首先,我们定义了两个 函数,一个是 changeSlice 修改传入的切片的每一个元素的值,将其值加上元素的值的本身,另一个是 changeArr 同样实现修改元素本身值的功能。
在 main 函数中,我们分别定义了切片和数组,分别调用两个函数来修改切片的值和数组的值,结果发现只有切片的值被修改了,而数组的值未被修改。
因此切片是指针类型的,因此传入函数的就是切片本身,而数组是值类型的,因此传入函数的是一个数组的拷贝。