前言 数组:存储相同数据类型的数据结构
数组是定长的,定义了多大就是多大。操作数组中的数据,可以通过索引来操作。
创建数组语法
数组
var array_name [size]array_type
var array_name = [size]array_type
var array_name = [size]array_type{v1, v2, v3, v4}//如果值比size小,int类型用0填充,string类型用空字符串填充。
var array_name = [size]array_type{index1: v1, index3 : v3} //size写成... 就会在赋值完成后自动计算数组长度
array_name := [...]array_type{v1, v2, v3, v4}
array_name := [...]array_type{index1: v1, index3 : v3}
多维数组 一维数组:存储数据本身
a1 := [3]int{1,2,3}
二维数组:数组中存储的也是数组
a2 := [3][4]int{{}, {}, {}}
容量3是指二位数组的容量,存储了3个一维数组;容量4是指一维数组的容量。
func main() {
arr := [3][4]int{{}, {1, 2, 3, 4}, {}}
fmt.Println(arr)
}//输出:[[0 0 0 0] [1 2 3 4] [0 0 0 0]]
访问数组 数组 使用数组的索引(下标)即可访问数组。
func main() {
array_test := []int{1, 2, 3, 4}
fmt.Println(array_test[0], array_test[3])
}
获取数组的长度和容量:len()获取长度、cap()获取容量,数组的长度和容量是相等的。
遍历二维数组
func main() {
arr := [2][4]int{{}, {1, 2, 3, 4}}
fmt.Println("---数组arr---: \n", arr) //for循环
fmt.Println("\n---for循环遍历数组arr---:")
for i := 0;
i < len(arr);
i++ {
for j := 0;
j < len(arr[i]);
j++ {
fmt.Printf("%d ", arr[i][j])
}
} //for range
fmt.Println("\n---for range遍历数组arr---:")
for _, arr1val := range arr {
for _, arr2val := range arr1val {
fmt.Printf("%d ", arr2val)
}
}
}
文章图片
数组的数据类型 值类型/引用类型
数组是值类型。赋值的时候,是将原来的值复制一份给新的值。操作新的值对原本数值没有影响。
数值类型:int float bool string array
引用类型:slice map...
【Golang|GO语言-数组Array】引用类型赋值的时候,新的值是直接操作原来值的内存地址。
Array内存分析 数组存储相同类型的数据,会开辟一个连续的内存。go语言的内存是系统自动分配的,当数组不用的时候,就会由GC垃圾回收机制从内存中回收。
数组的地址,其实就是数组第一个元素的地址。因为数组中的元素类型一样,占用内存大小一样。所以就很容易寻址。
func main() {
array_test := [4]int{1, 2, 3, 4}
fmt.Printf("%p--数组内存地址\n", &array_test)
fmt.Printf("%p--数组中第1个元素内存地址\n", &array_test[0])
fmt.Printf("%p--数组中第2个元素内存地址\n", &array_test[1])
}
文章图片
推荐阅读
- C|C语言深度解剖篇——关键字&&补充内容
- 笔记|C语言的猜字游戏
- hash|这一篇,带你十分钟深入理解HashMap源码
- qt|Qt 使用QDialog实现界面遮罩(蒙版)
- c++|qt基础入门教程
- golang统一错误处理
- 读书笔记|读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》
- java|Java 中的超快微服务( 当Microstream遇上Open Liberty)
- 开发|Django实现登录、注册、修改密码、重置密码