go-Array数组
数组Array
- 定义数组的格式:var <varname> [n] <type> ,n>=0
- 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型
- 注意区分指向数组的指针和指针数组
- 数组在Go中为值类型 (传递到函数中等都属于数组的拷贝)
- 数组之间可以使用==或!=进行比较,但不可以使用<或> (必须相同类型)
- 可以使用new来创建数组,此方法返回一个指向数组的指针
- Go支持多维数组
package main
import (
"fmt"
)
func main() {
m := [2]int{1} //长度为2的int数组,第一个元素为2,其他为0
n := [20]int{19:1} //长度为20的数组,第19个数组为1,其他为0
i = [...]int{1,2,3} //系统自动根据元素个数确定数组长度
var a [2]int
var b [1]int
a = b
fmt.Println(a) //cannot use b (type [1]int) as type [2]int in assignment
}
//注意:数组的长度与类型共同做为一个数组的特征,特征不同不能直接做赋值等操作
指向数组的指针
//指向数组的指针 package main import ( "fmt" ) func main() { a := [...]int{99:1} var p *[100]int = &a fmt.Println(a) fmt.Println(p) //&[0 0 0 0 0...] }
指针数组
//指针数组 package main import ( "fmt" ) func main() { x,y := 1,2 a := [...]*int{&x,&y} //保存的元素是指向int型的指针 fmt.Println(a) //[0x4211aa178 0x4211aa1a0] 保存了两个指针,并没有保存值 }
使用new创建数组
package main import ( "fmt" ) func main() { p := new([10]int) //返回指向数组的指针,可以直接使用索引操作数组元素 fmt.Println(p) //&[0 0 0 0 0 0 0 0 0 0] p[1] = 2 fmt.Println(p) // &[0 2 0 0 0 0 0 0 0 0] }
多维数组
package main
import (
"fmt"
)
func main() {
a := [2][3]int{
{1,1,1,},
{2,2,2}} //数组元素有两个,每个元素又是长度为3的数组
fmt.Println(a) //[[1 1 1] [2 2 2]]
b := [...][3]int{
{1:10},
{2:6}} // 对于不知道顶级元素有多少个时可以使用...,但是只有顶级元素可以用
fmt.Println(b) //[[0 10 0] [0 0 6]]
}
冒泡排序
package main import ( "fmt" ) func main() { a := [...]int{3,4,1,6,5,8,9} fmt.Println(a) //[3 4 1 6 5 8 9] 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) //[9 8 6 5 4 3 1] }