数组/切片以及扩容的概念 | Go语言基础

package main // 当前包声明

func main() { // 程序的入口
    // 数组
    //     存储一组相同数据类型的数据结构
    //  连续开辟内存,数组的地址其实是数组的首地址
    //  一旦定义,大小不能改变
    //  创建数组 ==> 访问数组(赋值,取值)
    var arr [4] int
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3
    arr[3] = 4
    fmt.Println(arr)  // 未赋值为默认值

    // 遍历数组
    for i:=0;i<len(arr);i++ // len()获取长度,cap()获取容器存储的最大数量,对于数组len()与cap()相同
        fmt.Println(arr[i])
    }

    // range 取下标与值
    arr := [10]int{1,2,3,4,5,6,7,8,9,10}  // "_"处理不需要的返回值
    for _, v := range arr{
        fmt.Println(v)
    }

    // 数组其他创建方式
    var b = [4] int {1,2,3,4}
    fmt.Println(b)

    // 根据下标:值
    var c = [5] int {1:1, 3:2}
    fmt.Println(c)

    // 用"..." 表示数组长度推断
    //d := [...] string {"1", "2", "3"}
    //fmt.Println(d, "\n", len(d))

    // 值类型:存储的是数值本身; 引用类型:存储数据的内存地址

    // 切片
    //  变长数组(引用类型的容器,指向底层数组),不写长度就是切片
    // 创建切片
    var a []int
    fmt.Println(a)
    var b = [] int {1,2,3}
    fmt.Println(b)
    // make
    a := make([]int,3,8)  // 类型,长度,容量
    fmt.Println(a)

    // 添加元素
    var tempSlice [] int
    tempSlice = append(tempSlice,1,2,3,4,5)
    fmt.Println(tempSlice)
    mySlice := []int{1,2,3}
    tempSlice = append(tempSlice, mySlice...) // 添加切片中的元素`...`
    fmt.Println(tempSlice)

    // 根据数组创建切片,地城数组就是当前的数组
    // 长度是从start到end切割的数据量,但是容量是start到数组的末尾.
    a := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    mySlice := a[0:5] // start:end
    fmt.Printf("%T %v", a, a)
    fmt.Printf("%T %v", mySlice, mySlice)

    // 扩容
    // 当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)
    // 当超过容量,切片指向的就不再原来的数组,而是内存地址中开辟了一个新的数组.
}

原文地址:https://www.cnblogs.com/pymkl/p/10057566.html

时间: 2024-08-30 15:51:25

数组/切片以及扩容的概念 | Go语言基础的相关文章

5th Java语言基础(数组)

05.01_Java语言基础(数组概述和定义格式说明)(了解) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. C:数组定义格式 数据类型[] 数组名 = new 数据类型[数组的长度]; 05.02_Java语言基础(数组的初始化动态初始化)(掌握) A:什么是数组的初始化 就是为数组开辟连续的内存空间,并为每个数组元素赋予值 B:如何对数组进行初始化

day05&lt;Java语言基础--数组&gt;

Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java语言基础(数组的内存图解2二个数组) Java语言基础(数组的内存图解3三个引用两个数组) Java语言基础(数组的初始化静态初始化及内存图) Java语言基础(数组操作的两个常见小问题越界和空指针 Java语言基础(数组的操作1遍历) Java语言基础(数组的操作2获取最值) Java语言基础(数

Go语言中的数组与数组切片

Go中的数组与C的数组一样,只是定义方法不同 c: int a[10][10] Go [10][10]int 定义并初始化 array1 := [5]int{1,2,3,4,5} 变量名 := [index]类型{也可不加} 1.元素访问:1.跟C语言一样通过数组来访问 2.通过关键字range来访问 如:for i,v :=range array{ fmt.Printlb(*Array element[",i,"]=*,v) }第一个表示下标从0到len(array)-1 2.值类型

go语言-golang基础-数据类型数组,数组切片,映射

7.7 数组 数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 以下为一些常规的数组声明方法: [32]byte // 长度为32的数组,每个元素为一个字节 [2*N] struct { x, y int32 } // 复杂类型数组 [1000]*float64 // 指针数组 [3][5]int // 二维数组 [2][2][2]float64 // 等同于[2

go语言 类型:数组切片

初看起来,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是个指针.数组切片的数据结构可以抽象为以下3个变量: 1.一个指向原生数组的指针: 2.数组切片中的元素个数: 3.数组切片已分配的存储空间. slice不是一个值类型,而是一个引用类型,就好比指针一样,对slice取得的元素进行写操作实际是影响到了底层的数组层,slice真的只是一层薄薄的操作封装罢了.因此,slice有一个重要的用途就是作为函数的参数,就这可以避免直接传递数组而导致整个数组发生一次内存拷贝.

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在你的应用程序中数组越界了,那么对不起,如果由着程序的性子的话是会崩溃的.为了防止崩溃呢,我们会对集合做一些安全的处理.比如对数组进行扩展,从而对数组的索引进行安全检查,保证数组的index在正常范围内.在Objective-C中也是经常对数组,字典等做一些处理操作. 今天的博客的主要内容是先对Objective-C中常用集合的安全

Go语言基础之切片

引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ sum = sum + v } return sum } 这个求和函数只能接受[3]int类型,其他的都不支持. 再比如, a := [3]int{1, 2, 3} 数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素了. 切片 切片(Slice)是一个拥有相同类型元素的可变长度的

golang中不定参数与数组切片的区别

package main import "fmt" func main() { myfunc1(88, 42, 12, 56) //传递不定数量的参数 myfunc2([]int{88, 42, 12, 56}) //传递一个数组切片 } func myfunc1(args ...int) { //接受不定数量的参数,这些参数的类型全部是int for _, arg := range args { fmt.Println(arg) } } func myfunc2(args []int

golang中的数组切片

概念:基于数组,数组切片添加了一系列管理功能,可以随时动态扩充存放空间,并且不会导致所管理的元素被重复复制. 创建数组切片: 方法一,基于数组: package main import "fmt" func main() { //define an array var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} //create a slice based on array var mySlice []int = m