七叶笔记 » golang编程 » Go语言基础—数组

Go语言基础—数组

数组介绍

  • 数组:具有固定长度相同类型元素序列
  • 声明数组的语法
 func main() {
   //var  对象名  [长度]元素类型
   var arr [5]int
   fmt.Println(arr) //[0 0 0 0 0],int默认值为0
}  
  • 数组就是 内存中一段固定长度的连续空间
  • 声明数组后数组就会在内存中开辟一块连续空间,每个值称为数组的元素,且元素值为类型对应的默认值,例如int类型默认值为0,string类型默认值为空字符串
 bool //默认值为false
string  //默认值为空字符串
int int8 int16 int32 int64 //默认值为0
uint uint8 uint16 uint32 uint64 uintptr //默认值为0
byte // uint8 的别名
rune // int32 的别名
float32 float64 //默认值为0
complex64 complex128 //默认值为0  
  • 数组中每个元素按照顺序都有自己整数类型的脚标,脚标从第一个元素为0向后依次增加1

var arr = [5]int

arr[0]=0

arr[1]=0

arr[2]=0

arr[3]=0

arr[4]=0

  • 数组中实际开发中主要作用是充当 临时容器 ,因为声明一个数组变量比声明多个相同类型变量在操作时更加方便

数组的创建和赋值

  • 可以在声明数组时可以同时给数组赋值,赋值时要求长度必须大于等于初始值个数
 func main() {
   //方式一:完整写法
   var arr [3]int = [3]int{1, 2, 3}
   //方式二:短变量方式
   arr2 := [3]int{1, 2, 3}
   //方式三:长度大于初始值个数,,个数为4,只给前三个元素赋值,其余元素为默认值
   arr3 := [4]int{1, 2, 3}
   //方式四:复制时不写长度,数组长度根据元素个数确定
   arr4 := [...]int{1, 2, 3}
   fmt.Println(arr, arr2, arr3, arr4)
}  
  • 可以通过 数组名[脚标] 对数组中元素进行操作
 func main() {
   arr := [...]int{1, 2, 3}
   fmt.Println(arr) //输出[1 2 3]
   //通过脚标对数组中元素进行重新赋值
   arr[0] = 5k
   arr[1] = 6
   arr[2] = 7
   fmt.Println(arr)  //输出[5 6 7]
   fmt.Println(arr[0], arr[1], arr[2]) //输出:5 6 7
}  
  • 通过 len(数组变量) 获取数组长度,数组脚标最大值为 长度减一 ,如果超出这个范围将会报错
 func main() {
   arr := [...]int{1, 2, 3}
   fmt.Println(len(arr))
   arr[3] = 5 //报错:invalid array index 3 (out of bounds for 3-element array)
}  

数组是值类型

  • 在Go语言中数组是值类型,和之前学习的int或者float64等类型相同,把一个数组变量赋值给另一个数组变量时为复制副本, 重新开辟一块空间
 func main() {
   arr := [...]int{1, 2, 3}
   arr2 := arr
   fmt.Println(arr,arr2)
   fmt.Println(&arr, &arr2) //错误写法一,输出为:&[1 2 3] &[1 2 3]
   fmt.Println("%p,%p",arr,arr2) //错误写法二:输出为 %p,%p [1 2 3] [1 2 3]
   fmt.Printf("%p, %p",&arr, &arr2) //输出地址不一:0xc00000c3a0, 0xc00000c3c0
}  

二维数组

  • 二维数组表示一个数组变量中每个元素又是一个数组变量
  • 声明二维数组的语法
 var arr [n][m]  
  • 使用arr[n]时返回一个arr[m]类型的数组
  • 图示:

二维数组

二维数组的使用

  • 声明并创建二维数组
 func main() {
   //写在同一行,最后一个元素后面不需要有逗号
   //arr6 := [3][3]int{{1, 2, 3}.{4, 5, 6}.{7, 8, 9}}
   arr := [3][3]int{
      {1, 2, 3},
      {4, 5, 6},
      {7, 8, 9}, //每个元素分行写,最后一个必须有括号
   }

   arr0 := arr[0]
   fmt.Println(arr0, arr[0], arr[1], arr[2]) //[1 2 3] [1 2 3] [4 5 6] [7 8 9]
}  

多维数组

  • 理论上支持无限多维数组(只要内存够用)
  • 三维数组可以理解成,一组数组中,每个元素都是二维数组
  • 四维数组可以理解成,一堆数组中每个元素都是三位数组
  • 无论是几维数组,都符号元素类型是相同的
  • 实际开发中多维数组使用并不多,在一定程度上,程序员使用多维数组容易出错
 func main() {
   arr := [2][2][2]int{
      {
         {1, 2},
         {3, 4},
      },
      {
         {5, 6},
         {7, 8},
      },
   }
   fmt.Println(arr) //输出:[[[1 2] [3 4]] [[5 6] [7 8]]]
   //几维数组在操作元素时,数组变量后面就有几个[]
   fmt.Println(arr[0][1]) //输出:[3 4]
}  

相关文章