基础复习

关于指针

一个指针的值是另一个变量的地址。

一个指针对应变量在内存中的存储位置

对于每个变量必然有对应的内存地址

var x int 声明一个x变量,&x 表示取x变量的内存地址,将产生一个指向该整数变量的指针,指针对应的数据类型是*int,指针被称为“指向int类型的指针”

如果指针名字为p, 那么p指针指向变量x 或者说p指针保存了变量的内存地址,同时*p 表达式对应p指向的变量的值,通常 *p 表示读取指针指向的变量的值

面试题

package main

import "fmt"

func main() {
    slice := []int{0,1,2,3}
    m := make(map[int]*int)
    for key, val := range slice {
        m[key] = &val
    }
    for k, v := range m {
        fmt.Println(k,"---->",*v)
    }
}

上面这个题初学者可能都会回答错误。

这里需要知道,for range 循环的时候会创建每个元素的副本,而不是元素的引用,而m[key] = &val 取的都是变量val地址,并且循环最后val被赋值为3,所以打印的结果是所有的输出都是3