数组

数组在go语言中是值类型

数组之间有==或!=比较,因为数组的长度也是类型的一部分,所以不同长度的数组是不同的类型。 如下所示,这是两种不同的类型。 数组的长度不同,所以==和!=比较=

以下ap数组和at数组类型不同

ap:=[5]int{3:2}//下标3的值代入2

at:=[6]int{}

数组遍历

//数组遍历,I是数组当前下标,p是与当前下标相对应的值,I可以替换为_下划线忽略

as :=[3] int { 1,2,3 }

for i,p :=range as {

f.println(I,'---',p ) ) )。

pa[i]=as[i]

}

//也可以进行常用的横移循环

le:=Len(as )

for i:=0; I

f.println(as[I] ) ) )。

}

数组指针和指针数组的区别与c差别不大

//指针数组

as :=[3] int { 1,2,3 }

var pa [3]*int

for i,p :=range as {

f.println(I,'---',p ) ) )。

pa[i]=as[i]

}

//数组指针

var pa2 *[3]int

pa2=as

f.println(*pa2 ) )。

切片slice

切片不是数组。 他是指向下层的数组

制作时一般使用make方法,第一个参数是指定的数组型,第二个是存储要素的个数,第三个是存储容量。 存储个数超过容量时,他从存储器地址*2、len方法取得长度,从cap取得容量

如果简单声明,则不声明数组长度的是切片。 比如说

s:=[] int{}//片

a :=[ 10 ] int { 1,2,3,4,5,6,7,8,9,10 } /数组

c :=a [ 3,5 ] /从切片c数组a的下标3获取5位元素值,不包括3,也不包括5下标

d:=a[3:]//下标3到a数组的长度

切片添加元素,方法append

s:=make([]int,5,10 ) /第一个参数表示存储类型,第二个参数表示存储数组的长度,第三个参数表示数组的最大长度。 长度超过10时将加倍,并分配20长的内存块。 如果未设置,则最大容量为数组长度

f.println(len ) s )、cap (s ) )//获取片的长度和容量

从s=append(s、1、2、3、4、5、6 )//末尾添加元素

s=append(s; //可以将一个片添加到另一个片

for _,al :=range s {

我是f.println(al )

}

//打印结果0 0 0 0 1 2 3 4 5 6

//为什么印刷是10要素,因为他的容量是10,所以印刷10要素

reslice切片重组

索引基于slice。 索引不能超过slice片的容量。 越界时,不会产生下级数组的新分配,会发生错误

a :=[ 10 ] int { 1,2,3,4,5,6,7,8,9,10 } /数组

s :=a [ 3,5 ]//片输出为[ 4,5 ]

RS :=s [ 0,1 ]/re slice输出为[4],下标从片s的0开始计算,与s的下标0对应的值为4

当RS :=s [ 0,10 ]时,片s的最大下标为7,也就是说容量为7,容量的评价方法为:cap(s )

疑问加站长微信联系(本论文作者以外) ) ) ) ) )。