1、普通变量
先看一段c
语言
int main(int argc, char **argv) {
int a = 3
// b引用了a的地址,就是说他们都指向一块地址
int &b = a
printf("a=%p, b=%p\n", &a, &b)
}
再看看go语言
func main() {
var a int
// b,c仅仅在自己的内存地址处保存了a的地址
var b, c = &a, &a
fmt.Println(b, c)
fmt.Println(&b, &c)
}
---------------
0xc420012088 0xc420012088
0xc42000c028 0xc42000c030
2、map 是引用传值吗?
func fn(m map[int]int) {
m = make(map[int]int)
m[1] = 2
fmt.Println("inner func, "
" addr=", unsafe.Pointer(&m),
" m==nil ?", m == nil,
" m=", m)
}
func main() {
var m map[int]int
fn(m)
fmt.Println("out func, map",
"addr=", unsafe.Pointer(&m),
" m=", m)
}
输出
inner func, map addr= 0xc42000c048 m==nil ? false m= map[1:2]
// 若是引用传值,外部的map也应该变化
out func, map addr= 0xc42000c040 m == nil ? true m= map[]