关于 数组是可变的 的疑问

文章中的 数组是可变的 应该怎么样去理解呢?
对索引项为 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)
}
6年前 评论
讨论数量: 6

:joy:所以问题是什么

6年前 评论

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

6年前 评论

@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)
}
6年前 评论

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

6年前 评论

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

5年前 评论
阿麦

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

5年前 评论