数组array
-
定义数组的格式:var< varName > [n] < type >, n >= 0
-
数组长度也是类型的一部分,因此具有不同长度的数组为不同类型
-
注意区分指向数组的指针和指针数组
-
数组在Go中为值类型(不是专递地址)
-
数组之间可以使用 == 或 != 进行比较,但不可以使用 < 或 >
-
可以使用new来创建数组,此方法返回一个指向数组的指针
-
Go支持多维数组
数组的定义格式
数组中元素的默认值为0
var a [2]int
var b [2]int
b = a
fmt.Println(b)
运行结果:
数组中未定义的元素为0
a := [2]int{1}
fmt.Println(a)
运行结果:
数组中元素的定义
只声明下标为19的第20个元素的值,其他为默认值
a := [20]int{19: 1}
fmt.Println(a)
运行结果:
省略的定义,自动识别
a := [...]int{1, 2, 3, 4, 5}
fmt.Println(a)
运行结果:
可以灵活的定义使用数组
a := [...]int{19: 3}
fmt.Println(a)
运行结果:
注意区分指向数组的指针和指针数组
指向数组的指针
a := [...]int{99: 3}
var p *[100]int = &a
fmt.Println(p)
//取数组的地址
运行结果:
指针数组
x, y := 1, 2
a := [...]*int{&x, &y}
fmt.Println(a)
//输出变量x的地址和变量y的地址,保存了两个指针,并没有保存实际的值
运行结果:
使用new关键字会产生一个指向数组的指针
p := new([10]int)
fmt.Println(p)
}
运行结果:
两种方法是一样的
a := [10]int{}
a[1] = 2
fmt.Println(a)
p := new([10]int)
p[1] = 2
fmt.Println(p)
运行结果:
多维数组
a := [2][3]int{
{1, 1, 1},
{2, 3, 4}}
fmt.Println(a)
运行结果:
Go语言冒泡排序
func main() {
a := [...]int{5, 3, 6, 4, 2}
fmt.Println(a)
num := len(a)
for i := 0; i < num; i++ {
for j := i + 1; j < num; j++ {
if a[i] < a[j] {
temp := a[i]
a[i] = a[j]
a[j] = temp
}
}
}
fmt.Println(a)
}
运行结果: