学习一段代码的时候,遇到了声明变量的时候使用了指针,但是使用的时候没有带&的,请教一下,如果不带&的话,操作的是指针地址的字符串还是指针指向的数据的内容?
比如下面这段代码,infile我理解是一个指向字符串的指针。后面在函数readValues里面用infile string,没用&infile;后面打开文件的时候用的是os.Open(infile),我理解os.Open()中应该是一个文件的绝对路径,infile是指针,&infile才是路径,这段代码执行都是成功的,就是不太理解为啥这样写是对的。
请各位专家帮忙指导一下,感谢。
```
package main
import (
"bufio"
"flag"
"fmt"
"io"
"os"
"sorter/algorithms/bubblesort"
"sorter/algorithms/qsort"
"strconv"
"time"
)
var infile *string = flag.String("i", "unsorted.dat", "File contains values for sorting")
var outfile *string = flag.String("o", "sorted.dat", "File to receive sorted values")
var algorithm *string = flag.String("a", "qsort", "Sort algorithm")
func readValues(infile string) (values []int, err error) {
file, err := os.Open(infile)
if err != nil {
fmt.Println("Failed to open the input file ", infile)
return
}
defer file.Close()
br := bufio.NewReader(file)
省略多行...
```
更多评论
1、就这段代码而言,函数readValues里面的infile string是参数,和外面的全局变量var infile *string没有关系。
2、就指针声明而言,如var infile *string声明了一个字符串指针infile,&infile表示取infile变量的地址,*infile才表示取指针指向的值。
#1