二、切片
三、總結
go的陣列可以說是不經常用到,切片會用到的更多,但是go的陣列與c的陣列又有著不同,所以還是想寫一下。
①最基本的定義
var arr1 [5]
int//[ ]中必須要有資料,沒有的話是切片
②定義的時候初始化
arr2 :=
[...
]int
//這種形式表示的話,陣列中的必須給全,你寫4個數,它就認為陣列長度是4
arr2 :=[5
]int
//這陣列中的數可以省略,從前往後依次排,沒排到的就是0
arr2 :=
int//這個玩意是切片,淦
arr2 = arr1 //把arr1陣列中的值全都傳給了arr2
③定義陣列指標
var arr3 :=
new([5
]int
)var arr4 [5]
intarr4 =
*arr3 //把arr3陣列中的值全都傳給了arr4
這句怎麼理解,go的陣列是值型別,你就把[n]
type當成基本型別,int、string、float32等等一樣就行
比如我們定義乙個int a=
9,b=10;
int*c=
&b; a=
*b
這個作個插入曲,大家看看下面,這兩個有什麼不相同
var temp1 *
intvar temp2 =
new(
int)
①temp1與temp2的型別是一樣的,都是指向int型別的指標
②不同的是,temp1是個int型指標,但是它並未指向任何位址;
temp2也是乙個int型的指標,但是它new了,表示已經申請了位址了
如果你想直接要帶指向空間的指標型別就用new
如果你只想要乙個無任何指向的指標,那就用第乙個
函式如何呼叫陣列呢?
func
addtemp
(tn [5]
int)
形參[n]
type的[
]中必須要有陣列,你傳入陣列多大,這個就必須多大,一一對應
func
addpoint
(th *[5
]int
)這個是傳入陣列指標型別的
var arr1 [5]
intvar arr2 =
new([5
]int
)如何傳入函式
addtemp
(arr1)
addtemp
(*arr2)
addpoint
(&arr1)
addpoint
(arr2)
這樣就很清楚了
最基本定義
var slice [
]int
//這個玩意就是切片,切切切片
如何給切片初始化:前提先有乙個陣列存在
var arr [5]
intarr :=
[...
]int
arr :=[5
]int
好,陣列有了,如何傳遞給切片呢?
slice = arr[m:n]
沒有陣列存在如何定義、初始化切片呢?
slice :=
[...
]int[:
]//這樣可以
slcie :=
int//這個,這個,即使後邊沒有[m:n]也是切片
還有一種方式,就是make
var slice =
make([
]int,10
,100
)//這裡不再解釋
這裡再插一句
比如定義了兩個切片slice1和slice2
然後執行一句 silce1=slice2
這樣的話slice1與slice2就是互為別名了,說白了,就是繫結了
無論對哪乙個切片進行改動,另乙個切片也會改變
函式如何呼叫切片呢
var slice [
]int
func
addtemp
(a [
]int
)func
addpoint
(a *
int)
呼叫:addtemp
(slice)
addpoint
(&slice)
如果將乙個陣列直接傳入切片形參的函式,應該這樣
addtemp
(arr[m:n]
)
陣列,型別(type)前面只要見到[n],就是裡面有數字的,或者[…] 的就是陣列
切片,只要見到[ ]裡面,毛也沒有,以及陣列後邊有[m:n]的,它就是切片
go 切片傳遞的隱藏危機
GoLang 陣列與切片
陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列 這是一種同構的資料結構 這種型別可以是任意的原始型別例如整型 字串或者自定義型別。陣列長度必須是乙個常量表示式,並且必須是乙個非負整數。陣列長度也是陣列型別的一部分,所以 5 int和 10 int是屬於不同型別的。一維陣列宣告以及初始化常見...
golang陣列,切片
陣列 同一種資料型別的固定長度序列 陣列的定義 var a len int 比如 var a 5 int 長度是陣列型別的一部分,因此,var a 5 int 和 var a 10 int 是不同的型別 陣列的初始化 func chushi var age1 5 int var age2 int v...
golang中陣列與切片的應用
加注釋擼起來 package main description 陣列與切片 author guai date 2020 2 21 9 15 import fmt math rand time func main fmt.println 雞的總重 totalweight 陣列定義和記憶體布局 定義 v...