数组Array
1、定 义 数 组 的 格 式 : var<varName> [n]<<type> ,n>=0
2、数 组 长 度 也 是 类 型 的一部分, 因此 具 有 不 同 长 度 的数组为 为 不 同 类 型
3、注 意 区 分 指 向 数 组 的 指针和 指 针 数 组
4、数 组 在Go 中 为 值 类 型
5、数 组 之 间 可 以 使 用 = = 或 ! = 进 行 比 较 , 但 不 可 以 使 用 < 或 >
6、可 以 使 用 new 来 创 建数组 , 此 方 法 返 回 一 个 指 向 数 组 的 指 针
7、Go支 持 多 维 数 组
var a [1]int
var b [10]int
以上a,b数组为不同的数组类型,因为它们的长度不一样。同类型的数组才可以使用= = 或 ! = 进 行 比 较。
Go语言中数组比较便捷的地方,可以快速的给某一个位置的赋值如下
x:=[20]int{19:1}
fmt.Println(x)
结果如下
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
这就快速把第二十个值赋值,数组的起始下标是0.
Go语言的数组可以自动计算数组的个数,如下
x:=[...]int{1,2,3,4,5,6,7}
也可以结合上两种方式赋值,举例如下:
y:=[...]int{0:1,1:2,2:3}
下边分析一下指向数组的指针和指针数组
z:=[...]int{9:1}
var p *[10]int=&z
fmt.Println(z)
fmt.Println(p)
运行结果
[0 0 0 0 0 0 0 0 0 1]
&[0 0 0 0 0 0 0 0 0 1]
其中p就是指向数组的指针
x,y:=1,2
a:=[...]*int{&x,&y}
fmt.Println(a)
这里实际上保存的地址,运行结果如下
[0xc0420080a8 0xc0420080c0]
这里的a就是指针数组
还有一个是Go语言中的特殊地方,其他语言中为了节省内存,数组是引用类型,而在Go语言中数组是值类型,Go语言中引用类型的数组用切片(slice)来表示。
p:=new([10]int)
fmt.Println(p)
运行结果如下
&[0 0 0 0 0 0 0 0 0 0]
这就是使用new关键字创建一个数组返回的是一个指向数组的指针。
还有一点就是不管指向数组的指针还是数组本身都可以使用下标来操作某一个具体的元素如下;
b:=[10]int{}
b[2]=2
p:=new([10]int)
p[2]=2
fmt.Println(b)
fmt.Println(p)
运行结果
[0 0 2 0 0 0 0 0 0 0]
&[0 0 2 0 0 0 0 0 0 0]
多维数组
a:=[2][3]int{
{1,2,3},
{4,5,6},
}
fmt.Println(a)
//或
a:=[2][3]int{
{1,2,3},
{4,5,6}}
fmt.Println(a)
对前边中括号中的2和3的解释就是数组中有2个元素,每个元素就是长度为3的int数组。
以下:Go 语 言 版 冒 泡 排 序–从大到小排序
b:=[...]int{3,1,6,99,9}
fmt.Println(b)
num:=len(b)
for i:=0;i<num ;i++ {
for j:=i+1;j<num ;j++ {
if b[i]<b[j]{
temp:=b[i]
b[i]=b[j]
b[j]=temp
}
}
}
fmt.Println(b)
运行结果
[3 1 6 99 9]
[99 9 6 3 1]