package main
import "fmt"
func modify(array [5]int){
array[0]=10
fmt.Println("----------",array)
}
func main(){
array:=[5]int{1,2,3,4,5}
modify(array)
//:數組的長度在定義之後無法再次修改;數組是值類型,
// 每次傳遞都將產生一份副本
fmt.Println("========",array)
/*
數組切片就像一個指向數組的指針,實際上它擁有自己的數據結構,而不僅僅是
個指針。數組切片的數據結構可以抽象爲以下3個變量:
一個指向原生數組的指針;
數組切片中的元素個數;
數組切片已分配的存儲空間
*/
//創建數組切片 兩種形式 基於數組和直接創建
//1.基於數組
//定義數組 var 定義 := 賦值
var myArray = [10]int{1,2,3,4,5,6,7,8,9,10}
//基於數組創建一個切片
var mySlice []int=myArray[2:5]
fmt.Println("Elements of myArray: ")
for _, v := range myArray {
fmt.Print(v, " ")
}
fmt.Println("\nElements of mySlice: ")
for _, v := range mySlice {
fmt.Print(v, " ")
}
fmt.Println()
//2.直接創建切片
//可以使用 make 這個函數創建數組切片
//創建一個初始元素個數爲5的數組切片元素初始值爲0:
mySlice1 :=make([]int,5)
fmt.Println(mySlice1)
//創建一個初始元素個數爲5的數組切片,元素初始值爲0,並預留10個元素的存儲空間:
mySlice2 :=make([]int,5,10)
fmt.Println(mySlice2)
//直接創建並初始化包含5個元素的數組切片:
mySlice3 := []int{1, 2, 3, 4, 5}
fmt.Println(mySlice3)
//元素遍歷
for i:=0;i<len(mySlice);i++{
fmt.Println("key",i,"-----","val",mySlice[i])
}
//可以使用 range 關鍵字 讓遍歷代碼更簡潔
for k,v:=range mySlice{
fmt.Println("key",k,"=========","val",v)
}
//動態增減元素
//可動態增減元素是數組切片比數組更爲強大的功能
//數組切片多了一個存儲能力
fmt.Println("len長度:",len(mySlice2))
//獲取數組的的空間大小
fmt.Println("cap空間大小:",cap(mySlice2))
//繼續追加元素
//一個一個追加
mySlice2 = append(mySlice2,11,12)
fmt.Println(mySlice2)
//數組追加
/*
在第二個參數mySlice2後面加了三個點,即一個省略號,如果沒有這個省
略號的話,會有編譯錯誤,因爲按append()的語義,從第二個參數起的所有參數都是待附加的
元素。因爲mySlice中的元素類型爲int,所以直接傳遞mySlice2是行不通的。加上省略號相
當於把mySlice2包含的所有元素打散後傳入。
*/
mySlice4 :=[]int{13,14}
mySlice2=append(mySlice2,mySlice4...)
fmt.Println(mySlice2)
//內容複製
//數組切片支持GO語言的另一個內置函數 copy 用於將內容從一個數組切片複製到另一個
//數組切片。如果加入的兩個數組切片不一樣大,就會按其中較小的那個數組切片的元素個數進行復制
slice1 :=[]int{1, 2, 3, 4, 5}
slice2 :=[]int{5, 4, 3}
copy(slice1,slice2)//只會複製slice2的3個元素到slice1的前3個位置
copy(slice2,slice1) // 只會複製slice1的前3個元素到slice2中
}
go語言 對數組 切片的理解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.