golang中的数组

1. 数组的声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main
 
import "fmt"
 
func main() {
    // 数组:定长且元素类型一致的数据集合
    // 方式一:先声明在赋值,声明时内存中已经开辟了空间
    var nums [3]int // 内存中已开辟空间,初始化的值是0
    nums[0] = 999
    nums[1] = 666
    nums[2] = 333
    fmt.Println(&nums, nums)
    fmt.Printf("%p\n", &nums)
 
    // 方式二:声明+赋值
    names := [2]string{"ma", "ya"}
    fmt.Println(names)
 
    // 方式三:声明+赋值+指定位置
    var ages = [3]int{1: 22, 0: 87, 2: 99}
    fmt.Println(ages)
 
    // 方式四:省略个数
    str1 := [...]string{0: "hahah", 2: "hehad"}
    fmt.Println(str1)
 
    // 声明指针类型的数组(指针类型),不会开辟内存初始化数组中的值,numbers=nil
    var numbers *[3]int
 
    // 声明数组并初始化,返回的是指针类型的数组(指针类型)
    numbers2 := new([3]int)
 
    fmt.Println(numbers, numbers2)
 
}

  2. 数组内存管理

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import "fmt"
 
func main() {
    nums := [3]int32{11, 22, 33}
    fmt.Printf("数组的内存地址:%p\n", &nums)
    fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[0])
    fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[1])
    fmt.Printf("数组的第一个元素的内存地址:%p\n", &nums[2])
 
    names := [2]string{"沛齐", "alex"}
    fmt.Printf("字符串数组的内存地址:%p\n", &names)
    fmt.Printf("字符串数组的内存地址:%p\n", &names[0])
    fmt.Printf("字符串数组的内存地址:%p\n", &names[1])
}

  

 3. 数组的可变和拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
 
import "fmt"
 
func main() {
    // 数组的可变和拷贝
    // 可变,数组的元素可以被更改,长度和类型都不可以被修改
    names := [2]string{"武沛齐", "alex"}
    names[1] = "袁浩"
    fmt.Println(names)
    // 注意:字符串不可以被修改
 
    // 拷贝,变量赋值时重新拷贝一份
    name1 := [2]string{"武沛齐", "alex"}
    name2 := name1
    name1[1] = "袁浩"
    fmt.Println(name1, name2)
}

  

4. 数组的长度、索引、切片、循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main
 
import "fmt"
 
func main() {
    // 长度、索引、切片、循环
    name := [2]string{"武沛齐", "alex"}
 
    // 1. 长度
    fmt.Println(len(name))
 
    // 2. 索引
    fmt.Println(name[0])
    name[0] = "eric"
    fmt.Println(name)
 
    // 3. 切片
    nums := [3]int{11, 22, 33}
    data := nums[:2]  // 获取 0<=下标<2
    fmt.Println(data)
 
    // 4. 手动循环
    for i := 0; i < len(nums); i++ {
        fmt.Println(i, nums[i])
    }
 
    // 5. for range 循环
    for index, item := range nums {
        fmt.Println(index, item)
    }
    for index := range nums {
        fmt.Println(index)
    }
    for _, item := range nums {
        fmt.Println(item)
    }
 
}

  5. 数组的嵌套

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main
 
import "fmt"
 
func main() {
    // 数组嵌套
    var nestData [2][3]int
    nestData[0] = [3]int{11, 22, 33}
    nestData[1][1] = 88
    fmt.Println(nestData)
 
    nestData2 := [2][3]int{{11, 22, 33}, {4, 5, 6}}
    fmt.Println(nestData2)
 
}

  

posted @   专职  阅读(76)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示