数组的弊端:
1、固定数组大小
2、值传递,赋值整个数组,占用内存
3、b:=[...]int{1,2,3}//不指定数组大小定义数组并初始化
因为数组做函数参数是值传递(c语言中是引用传递),所以使用函数指针作为函数参数比较高效
例如:
package main
import (
"fmt"
"math/rand"
"time"
)
//冒泡排序:切片,引用传递
func Bubble(a []int) {
for i := 0; i < len(a); i++ {
for j := 0; j < len(a)-i-1; j++ {
if a[j] > a[j+1] {
a[j], a[j+1] = a[j+1], a[j]
}
}
}
fmt.Println("排序后数组为:", a)
}
//数组,值传递,需要指明数组大小
func Bubble2(a [10]int) {
for i := 0; i < len(a); i++ {
for j := 0; j < len(a)-i-1; j++ {
if a[j] > a[j+1] {
a[j], a[j+1] = a[j+1], a[j]
}
}
}
fmt.Println("排序后数组为:", a)
}
//引用传递
func Bubble1(a *[10]int) {
for i := 0; i < len(a); i++ {
for j := 0; j < len(a)-i-1; j++ {
if a[j] > a[j+1] {
a[j], a[j+1] = a[j+1], a[j]
}
}
}
fmt.Println("排序后数组为:", a)
}
func main() {
rand.Seed(time.Now().UnixNano())
var a [10]int
for i := 0; i < len(a); i++ {
a[i] = rand.Intn(100)
}
fmt.Println("原数组为:", a)
Bubble2(a)
fmt.Println("a变为数组为:", a)
//切片,属于引用传递
var b []int = []int{8, 2, 3, 4, 5}
Bubble(b)
fmt.Println("b变为数组为:", b)
//数组指针作为参数
Bubble1(&a)
fmt.Println("a1变为数组为:", a) //a1变为数组为: [1 25 27 35 37 73 75 86 92 99]
}
运行结果:
原文:https://www.cnblogs.com/zhaopp/p/11439736.html