22_数组做函数参数

数组的弊端:
       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