为什么在函数传参时,数组参数有无固定长度,会产生这样的差距,就是arr5里面的内容不会被改变,arr7却会改变,刚开始学go,求大佬赐教

codeYuanY · · 940 次点击
<a href="/user/xuanwen" title="@xuanwen">@xuanwen</a> @avtion谢谢二位的解答,让我感受到初次来到的这个社区的温暖
#8
更多评论
#### 这是一个关于array与slice的问题 这两个看起来长得差不多,刚开始的确挺容易弄混淆的 ```golang package main import ( &#34;fmt&#34; ) // 数组array-值传递 func Modify1(array [5]int) [5]int { array[0] = 300 return array } // slice-地址传递 func Modify2(array []int) []int { array[0] = 300 return array } func main() { // 数组-需要明确指定大小 arr5 := [5]int{1, 2, 3, 4, 5} arr6 := Modify1(arr5) fmt.Println(&#34;arr5:&#34;, arr5) // 打印结果:[1 2 3 4 5] fmt.Println(&#34;arr6:&#34;, arr6) // 打印结果:[300 2 3 4 5] // slice-不需要明确指定大小 arr7 := []int{1, 2, 3, 4, 5} arr8 := Modify2(arr7) fmt.Println(&#34;arr7:&#34;, arr7) // 打印结果:[300 2 3 4 5] fmt.Println(&#34;arr8:&#34;, arr8) // 打印结果:[300 2 3 4 5] /* // 数组-大小不可以变化 // 此处报错: ./main.go:32:16: first argument to append must be slice; have [5]int arr9 := append(arr5, 6) fmt.Println(&#34;arr9:&#34;, arr9) // 此处报错 */ // slice-大小可以变化 arr10 := append(arr7, 6) fmt.Println(&#34;arr10:&#34;, arr10) // 打印结果:[300 2 3 4 5 6] } ``` &lt;br/&gt; 明确指定大小即固定长度的为**array** &lt;br/&gt; 动态改变大小即不固定长度的为**slice** &lt;br/&gt; 在函数传递中,array是**值传递**,slice是**地址传递** &lt;br/&gt; &lt;br/&gt; 明确这个就应该很容易理解啦 &lt;br/&gt; arr5 是 array --- 值传递 --- 不改变&lt;br/&gt; arr7 是 slice --- 地址传递 --- 改变&lt;br/&gt; &lt;br/&gt; #### 传递一个小技巧 在写代码的三个点后面加上golang,代码可以变得高亮
#1
上面预览的格式有点错乱,重新发布一下总结 ``` 明确指定大小即固定长度的为array 动态改变大小即不固定长度的为slice 在函数传递中,array是值传递,slice是地址传递 明确这个就应该很容易理解啦 arr5 是 array --- 值传递 --- 不改变 arr7 是 slice --- 地址传递 --- 改变 ``` #### 传递一个小技巧 在写代码的三个点后面加上golang,代码可以变得高亮
#2