数组
数组在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 )
疑问加站长微信联系(本论文作者以外) ) ) ) ) )。