Go语言指针使用问题---BUG(21.8.13)

144 阅读1分钟

Go语言指针使用问题---BUG

学习Go语言中的键盘输入语法,欲手敲以下代码,发现有大量重复的语句,于是想将重复的语句复用,写成一个函数

image.png

第一次改写内容如下:

存在的问题是:输出结果无法将返回值带回来

package main
​
import "fmt"// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data [7]string)  {  
​
    for i:=0; i < len(argName); i++{
        fmt.Println("请输入", argName[i])
        fmt.Scanln(&data[i])
    }
}
​
func main() {
    var infoTitle =  []string {"姓名", "年龄", "薪水", "是否通过考试"}
    var data [7]string
    mesgInput(infoTitle,data)
    fmt.Println(data)
}
第二次修改代码:

想到函数中如果想将值带回来,需要在参数列表中使用指针类型,修改如下,但带来的问题是在main函数中的调用中会出现爆红

package main
​
import "fmt"// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data [7]*string)  {
​
    for i:=0; i < len(argName); i++{
        fmt.Println("请输入", argName[i])
        fmt.Scanln(&data[i])
    }
}
​
func main() {
    var infoTitle =  []string {"姓名", "年龄", "薪水", "是否通过考试"}
    var data [7]string
    mesgInput(infoTitle,&data)   //会报错 
    fmt.Println(data)
}
第三次修改代码

注意到 data *[7]string 和data [7]*string 的区别

data [7]*string 意思是数组还是值类型,只是将数组中存储的string修改为指针类型,数组仍然是值类型

data *[7]string 意思是将数组是为指针类型

修改后成功将值带会

package main
​
import "fmt"// 定义一个函数,输入信息的函数
func mesgInput(argName []string, data *[7]string)  {
​
   for i:=0; i < len(argName); i++{
      fmt.Println("请输入", argName[i])
      fmt.Scanln(&data[i])
   }
}
​
func main() {
   var infoTitle =  []string {"姓名", "年龄", "薪水", "是否通过考试"}
   var data [7]string
   mesgInput(infoTitle,&data)
   fmt.Println(data)
}