关于 数组是可变的 的疑问

文章中的 数组是可变的 应该怎么样去理解呢?
对索引项为 i 的数组元素赋值可以这么操作:arr[i] = value
但是事实上这个赋值

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}

会报错的 invalid array index 2
文章中所说的如下:
第一个元素是 arr1[0],第三个元素是 arr1[2];总体来说索引 i 代表的元素是 arr1[i],最后一个元素是 arr1[len(arr1)-1]

对索引项为 i 的数组元素赋值可以这么操作:arr[i] = value,所以数组是 可变的

只有有效的索引可以被使用,当使用等于或者大于 len(arr1) 的索引时:如果编译器可以检测到,会给出索引超限的提示信息;如果检测不到的话编译会通过而运行时会 panic:(参考 第 13 章

runtime error: index out of range
最佳答案

@num-10

首先答案是“数组是可变的”,之所以你会有疑问,我觉得可能是你理解的概念有点偏差。

我解释一下,这里的“可变”,指的是数组内容可以变化。比如数组[1,2,3]变成了[1,2,4],数组的内容变化了。

其次,你应该理解数组的长度概念,在你的代码中,声明了数组长度为2,那么用arr[2]去访问第三个元素必然会报错,索引是从0开始数的~

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}
4年前 评论
讨论数量: 6

:joy:所以问题是什么

4年前 评论

@Changui sorry,我的问题是数组到底是不是可变的

4年前 评论

@num-10

首先答案是“数组是可变的”,之所以你会有疑问,我觉得可能是你理解的概念有点偏差。

我解释一下,这里的“可变”,指的是数组内容可以变化。比如数组[1,2,3]变成了[1,2,4],数组的内容变化了。

其次,你应该理解数组的长度概念,在你的代码中,声明了数组长度为2,那么用arr[2]去访问第三个元素必然会报错,索引是从0开始数的~

func main() {
  var arr [2]int
  arr[0] = 1
  arr[1] = 2
  arr[2] = 3
  fmt.Println(arr)
}
4年前 评论

@Changui 谢大佬提示,是我把概念理解错了,这个可变指的是数值的值,数组的长度是固定的 :sweat_smile:

4年前 评论

数组长度不可变,内容可变

4年前 评论
阿麦

在学习 RUST 的时候也看到过这概念 就是 数组里有几个元素是固定的 但每个元素里面的 值是可以变化的 然后当你获取不存在的数组索引的时候 会报错 反正 RUST 是这样

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!