2020-12-19-GO-Day6-数组

内容太多了。本次先更新数组。
数组的概念,其实和numpy有的一拼。基本上是array的操作。在单类型的数组中,软拷贝类似于python的概念。

package main
import ("fmt")

func main() {
   //*数组*
   //和numpy的概念很类似。其中,数组是一组数据类型一样的元素的集合。占用的内存是连续分配
   //数组可以用下标来进行索引

   //*初始化数组*
   var arr [5]int //长度为5,的int类型数组,
   fmt.Println(arr) //初始化后,每个元素都是0. //[0 0 0 0 0]
   arr2 :=[5]int{10,20,30,40}
   fmt.Println(arr2) //[10 20 30 40 0] 没有声明的元素,用0表示
   //不声明长度的话,Go会自动填充长度。[...]表示
   arr3 := [...]int{10,20,40,60,70}
   fmt.Println(len(arr3)) //5
   //还可以只声明某几个角标的元素
   arr4 := [5]int{2:10,4:25}
   fmt.Println(arr4) //[0 0 10 0 25]

   //*使用数组*
   arr5 := [...]int{10,20,30,40,50}
   fmt.Println(arr5[3])

   //修改元素
   arr5[4] = 60
   fmt.Println(arr5) //[10 20 30 40 60]

   //*指针数组*
   //其实就是指针的数组。声明一个所有元素都是“指针”的数组。使用*就可以访问元素指针所指向的值
   // 声明包含 5 个元素的指向整数的数组
   // 用整型指针初始化索引为 0 和 1 的数组元素
   arr6 :=[5]*int{0:new(int),1:new(int)}
   *arr6[0] =10
   *arr6[1] =20
   fmt.Println(arr6) // [0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
   //可以看到 0xc00000a0b8 和 0xc00000a0e0 并不是10和20,这是内存中的地址指针。定义过后的地址指针是由内存中的地址的,而没有定义的,则是空nil
   // 如何看到内存地址为0xc00000a0b8和0xc00000a0e0所指向的值是什么呢?
   fmt.Println(*arr6[1]) //20

   //*赋值操作*
   //赋值有2中方法:第一种是 arr1= arr2,第二种是 arr1= copy arr2
   //第一种方法中,只有相同的地方才能全部赋值

   arr7 := [4]string{}
   arr8 := [...]string{"red","blue","green","yellow"}
   arr7 = arr8
   fmt.Println(arr7)
   //在没有声明arr7的长度时,arr7 := []string{},或者arr7和arr8的长度不一致时,赋值操作会报错:cannot use arr8 (type [4]string) as type []string in assignment
   //因此要修改arr7 :=[4]string{}

   //指针数组赋值给另一个
   // 声明第一个包含 3 个元素的指向字符串的指针数组
   arr9 := [3]*string{}
   arr10 :=[3]*string{new(string),new(string),new(string)}
   *arr10[0]= "red"
   *arr10[1]= "blue"
   *arr10[2]= "green"
   arr9 = arr10
   fmt.Println(arr9) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
   fmt.Println(arr10) //[0xc00003c1f0 0xc00003c200 0xc00003c210]
   fmt.Println(*arr9[2])

   //*多维数组*
   arra1 :=[3][4]int{}  //3行4列
   fmt.Println(arra1) //[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
   arra2 := [4][2]int{1: {0: 20}, 3: {1: 41}}
   fmt.Println(arra2) //[[0 0] [20 0] [0 0] [0 41]]
}

输出结果


"C:\Program Files\JetBrains\GoLand 2020.1.3\go1.15.6\go\bin\go.exe" build -o 

[0 0 0 0 0]
[10 20 30 40 0]
5
[0 0 10 0 25]
40
[10 20 30 40 60]
[0xc00000a0b8 0xc00000a0e0 <nil> <nil> <nil>]
20
[red blue green yellow]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
[0xc00003c1f0 0xc00003c200 0xc00003c210]
green
[[0 0 0 0] [0 0 0 0] [0 0 0 0]]
[[0 0] [20 0] [0 0] [0 41]]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容