本地版本 version go1.17.2
一、数组
package main
import (
"fmt"
)
func main() {
// 数组
var arr = [3]int{1,2,3}
testArr(&arr)
fmt.Println(arr)
}
//
func testArr(arr *[3]int) {
for _,k := range arr {
fmt.Println(k)
}
fmt.Println(*arr)
// 使用 * 改变数组变量
(*arr)[1] = 1
// 直接改变数据
arr[2] = 7
}
运行结果:
可以看到,数组即使不加 * 也能够正常改变数量内的值
二、int
package main
import (
"fmt"
)
func main() {
// 数组
var num int = 3;
testNum(&num)
fmt.Println(num)
}
func testNum(num *int) {
// 当不带 * 进行数据的赋值,则会报错。
//num = 2
*num = 2
}
运行结果:
可以看出 int 类型只能通过 *变量名 才能改变值
三、string
package main
import (
"fmt"
)
func main() {
// 数组
var str string = "123";
testNum(&str)
fmt.Println(str)
}
func testNum(str *string) {
//str = "456"
*str = "456"
}
运行结果:
可以看出 string 类型只能通过 *变量名 才能改变值
四、总结
- array 地址传递到函数中,无论是否使用 * 作为前缀都可以修改数组的值
- int、string 则必须添加 * 作为前缀才能修改相关的值