Golang 陣列與切片的對比 防備忘

2021-10-10 07:38:05 字數 2493 閱讀 3800

二、切片

三、總結

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...