GO编程基础之四

1.数组Array:

---定义数组的格式:var  <varName>  [n]  <type>  ,n >=0

---数组长度也是类型的一部分,因此具有不同长度的数组为不同类型

---注意区分指向数组的指针和指针数组

---数组在Go中为值类型

---数组之间可以使用==或!=进行比较,但不可以使用<或>

----可以使用new来创建数组,此方法返回一个指向数组的指针

---Go支持多维数组

(1)不合法赋值:数组长度不同

func main(){
    var a [2]int
    var b [1]int
    b = a
    fmt.Println(b)
}

 

(2)合法的赋值:数组长度相同

func main(){
    var a [2]int
    var b [2]int
    b = a
    fmt.Println(b)
}

(3)数组存储值的方式:可以使用变量的简写,长度和值的个数不一致时,会使用0填充

func main(){
    a := [2]int{1,1}
    fmt.Println(a)
}

(4)数组的索引与赋值:

func main(){
    a := [20]int{19:1}    //第20个元素赋值为1.其余元素用0自动填充
    fmt.Println(a)
}

(5)不指定数组长度进行赋值:

func main(){
    a := [...]int{1,2,3,4,5,6,7,8,9}   //使用三个点代替具体的长度
    fmt.Println(a)
}

(6)用索引进行初始化数组:

func main(){
    a := [...]int{0:1,1:2,2:3,3:4,4:5}  //数组初始化中包含索引
    fmt.Println(a)
}

(7)指向数组的指针:打印指针的值和直接打印数组的值一样,只不过多了一个人地址符号

func main(){
    a := [...]int{99:1}
    var p *[100]int = &a   //指针p是长度为100的int型数组,加*表示是指针,= &a表示是取a的地址
    fmt.Println(p)
}

(8)指针数组:输出变量的地址,它实际上是保存了两个指针,而没有保存实际的值

         

func main(){
    x,y := 1,2
    a := [...]*int{&x,&y}  //a是指向int型的指针,它保存的元素是指向int型的指针,&x,&y表示取x和y的值
    fmt.Println(a)
}

(9)其他语言的数组都是引用类型,Go语言的数组是值类型;

也就是说当你把树枝传递到方法或者函数当中的时候,它是将整个数组进行拷贝的;而不是传递一个地址给那个方法或者函数;

func main(){
    a := [2]int{1,2}
    b := [2]int{1,3}
    fmt.Println(a == b)   //长度相同的数组可进行比较.返回false
}

func main(){
    a := [2]int{1,2}
    b := [1]int{1} 
    fmt.Println(a == b)  //长度不相同的数组不可以进行比较,报错
}

(10)new关键字来创建数组:

func main(){
    p := new([10]int)  //使用new关键字来创建数组
    fmt.Println(p)      //返回的也是指向数组的指针
}

 (11)对单个数组元素进行赋值:

func main(){
    a := [10]int{}
    a[1] = 2
    fmt.Println(a)
    p := new([10]int)  //使用new关键字来创建数组
    p[1] = 3
    fmt.Println(p)      //返回的也是指向数组的指针
}

(12)多维数组:

  a := [2][3]int{
      {1,1,1},
      {2,2,2}}
  fmt.Println(a)
}

(13)顶级数组维度可以使用...代替数组长度,但是非顶级的数组维度不可以使用...代替数组

func main(){
  a := [...][...]int{
      {1,1,1},
      {2,2,2}}
  fmt.Println(a)   //报编译错误
}

(14)冒泡排序:

func main(){
  a := [...]int{5,8,1,6,3,7,2}
  fmt.Println(a)
  num := len(a)   //变量num初始化赋值必须用:=,不能直接用=
  for i := 0; i <num ;i++ {
     for j := i + 1;j<num;j++ {   //变量j初始化赋值必须用:=,不能直接用=
         if a[i]<a[j] {
             temp := a[i]     //变量temp初始化赋值必须用:=,不能直接用=
             a[i] = a[j]
             a[j] = temp   //变量初始化赋值才用:=  ,变量之间赋值不用:=
         }
     }
  }
  fmt.Println(a)
}

原文地址:https://www.cnblogs.com/hqutcy/p/10048356.html