写点什么

【一 Go 到底】第二十七天 --- 数组注意事项及细节

作者:指剑
  • 2022-10-27
    重庆
  • 本文字数:1155 字

    阅读完需:约 4 分钟

【一Go到底】第二十七天---数组注意事项及细节

一、注意事项和细节

  1. 数组是多个相同类型数据的组合,,一个数组一旦声明/定义了,其长度是固定的,不能动态变化。详见细节一(2.1)

  2. var arr [int] 这时 arr 就是一个 slice 切片

  3. 数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用。

  4. 数组创建后,如果没有赋值,有默认值。详见细节二(2.2)


  • 数值类型数组:默认值为 0

  • 字符串数组: 默认值为 ""

  • bool 数组: 默认值为 false


  1. 使用数组的步骤


  • 声明数组并开辟空间

  • 给数组各个元素赋值 3 使用数组


  1. 数组的下标是从 0 开始的。

  2. 数组下标必须在指定范围内使用,否则报 panic: 数组越界,比如 var arr [5]int 则有效下标为 0-4

  3. Go 的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝。数组间不会相互影响

  4. 如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式) 。详见细节三(2.3)

  5. 长度是数组类型的一部分,在传递函数参数时,需要考虑数组长度,不同数组长度不能传递。详见细节四(2.4)

二、案例演示

2.1 细节一

package main
import "fmt"
func main() { // 数组是多个相同数据类型的组合,一个数组一旦声明,其长度是固定的,无法动态变化 var arr01 [3]int arr01[0] = 1
// arr01[1] = 2.2 //会报错,类型不符 arr01[2] = 3
// arr01[3] = 4 // 报错,越界
// arr01 = [1 0 3] fmt.Println("arr01 = ", arr01) }
复制代码

2.2 细节二

package main
import "fmt"
func main() {
// 数组类型默认值 // 数值类型 0 // 字符串类型 "" // bool类型 false
arr01 := [3]float32{} arr02 := [3]string{} arr03 := [3]bool{} // 数值型数组 = [0 0 0] // 字符型数组 = [ ] // 布尔型数组 = [false false false] fmt.Println("数值型数组 = ", arr01) fmt.Println("字符型数组 = ", arr02) fmt.Println("布尔型数组 = ", arr03)}
复制代码

2.3 细节三

package main
import "fmt"
// 定义函数func testArr(arr *[3]int) { (*arr)[0] = 100}
func main() { // 引用传递 arr := [3]int{11, 22, 33} testArr(&arr) // main arr = [100 22 33] fmt.Println("main arr = ", arr)
}
复制代码

2.4 细节四

2.4.1 错误一

package main
import "fmt"
func arrfc(arr []int) { arr[0] = 100 fmt.Println("arr函数中的 arr = ", arr)}
func main() { arr := [...]int{1, 2, 3} // 报错 // .\main.go:12:8: cannot use arr (variable of type [3]int) as type []int in argument to arrfc // mian中的arr是 [3]int类型的,不能将其传递给 arrfc []int arrfc(arr)}
复制代码

2.4.2 正确案例

package main
import "fmt"
func arrfc(arr [3]int) { arr[0] = 100 fmt.Println("arr函数中的 arr = ", arr)}
func main() { arr := [...]int{1, 2, 3} // arr函数中的 arr = [100 2 3] arrfc(arr)}
复制代码


发布于: 刚刚阅读数: 3
用户头像

指剑

关注

InfoQ签约作者 2022-07-13 加入

AWS社区建设者,AWS学生大使,微软学生大使,阿里云签约作者,Info Q签约作者,CSDN博客专家,华为云云享专家

评论

发布
暂无评论
【一Go到底】第二十七天---数组注意事项及细节_Go_指剑_InfoQ写作社区