龙空技术网

Golang入门专题-数组和切片

中国行思者 89

前言:

目前大家对“c语言获取一行”可能比较关切,兄弟们都想要剖析一些“c语言获取一行”的相关资讯。那么小编在网上搜集了一些有关“c语言获取一行””的相关内容,希望看官们能喜欢,咱们一起来学习一下吧!

数组 Arrays

在 Go 中,数组是特定长度的元素的编号序列:

package mainimport "fmt"func main() {    // 声明一个长度为5的数组    var a [5]int    fmt.Println("emp:", a)    // 设置数组元素值    a[4] = 100    fmt.Println("set:", a)    fmt.Println("get:", a[4])    // 获取数组长度    fmt.Println("len:", len(a))    // 初始化并赋值    b := [5]int{1, 2, 3, 4, 5}    fmt.Println("dcl:", b)        // 多维数组    var twoD [2][3]int    for i := 0; i < 2; i++ {        for j := 0; j < 3; j++ {            twoD[i][j] = i + j        }    }    fmt.Println("2d: ", twoD)}
切片 Slices

Slice可以认为是更强大的数组:

make:创建切片;append:扩展切片;copy:拷贝切片;slice:截取切片;

package mainimport "fmt"func main() {    // 使用make创建切片    s := make([]string, 3)    fmt.Println("emp:", s)    // 切片的set和get方式    s[0] = "a"    s[1] = "b"    s[2] = "c"    fmt.Println("set:", s)    fmt.Println("get:", s[2])    // 获取切片的长度    fmt.Println("len:", len(s))    // 给切片增加新的值,但这里会产生新的slice    s = append(s, "d")    s = append(s, "e", "f")    fmt.Println("apd:", s)    c := make([]string, len(s))    copy(c, s)    fmt.Println("cpy:", c)    l := s[2:5]    fmt.Println("sl1:", l)    l = s[:5]    fmt.Println("sl2:", l)    l = s[2:]    fmt.Println("sl3:", l)    // 像初始化数组一样初始化切片    // 唯一区别在于,数组初始化时有固定长度    t := []string{"g", "h", "i"}    fmt.Println("dcl:", t)    // 同样存在多维度    twoD := make([][]int, 3)    for i := 0; i < 3; i++ {        innerLen := i + 1        twoD[i] = make([]int, innerLen)        for j := 0; j < innerLen; j++ {            twoD[i][j] = i + j        }    }    fmt.Println("2d: ", twoD)}
数组和切片的区别

在Go语言中,数组(Array)和切片(Slice)都是用于存储一组数据的数据结构。它们的主要区别在于以下几个方面:

长度固定 vs 可变长度:数组的长度在定义时就已经确定,并且无法在运行时修改;而切片的长度可以动态增加或减少。内存分配方式:数组在声明时会被分配一段静态内存空间,而切片则是一个动态的数据结构,它的底层内存可能会被自动扩容或缩容。传递方式:数组是值类型,传递数组时会进行一次完整的复制;而切片是引用类型,传递切片时只会复制一个指针和长度,不会复制底层的数据。初始化方式:数组可以使用静态初始化或动态初始化的方式进行初始化;而切片只能通过make函数或字面量的方式进行初始化。

下面是一个简单的示例,演示了数组和切片的基本用法和区别:

func main() {    // 静态初始化数组    var arr [3]int = [3]int{1, 2, 3}    fmt.Println(arr) // 输出 [1 2 3]    // 动态初始化数组    var arr2 [3]int    arr2[0] = 1    arr2[1] = 2    arr2[2] = 3    fmt.Println(arr2) // 输出 [1 2 3]    // 切片的创建和初始化    s := make([]int, 3) // 创建一个长度为3的切片    s[0] = 1    s[1] = 2    s[2] = 3    fmt.Println(s) // 输出 [1 2 3]    // 切片的动态扩容    s = append(s, 4)    fmt.Println(s) // 输出 [1 2 3 4]}

在上面的示例中,我们首先演示了数组的静态初始化和动态初始化方式,然后演示了切片的创建和初始化方式,最后演示了切片的动态扩容过程。可以看到,切片的使用非常灵活,可以方便地进行动态扩容或缩容,而数组则只能使用静态初始化或动态初始化的方式进行初始化,并且长度固定,无法动态修改。

每日一Tip

Go 中有序集合最常用Slice切片,无脑使用即可。

标签: #c语言获取一行