指针就是地址。 指针变量就是存储地址的变量。
*p:解引用、间接引用。
栈帧:用来给函数运行提供内存空间。取内存于 stack 上。
当函数调用时,产生栈帧。函数调用结束,释放栈帧。
栈帧存储:1.同部变量。2.形参。(形参与局部变量存储地位等同)3.内存字段描述值
变量存储:
等号 左边的变量,代表 变量所指向的内存空间。
等号 右边的变量,代表 变量内存空间存储的数据值。
指针的函数传参。
传地址(引用):将形参的地址值作为函数参数、返回值后传递,
传值(数据据):将实参的 值 拷贝一份给形参。
传引用:在A栈帧内部,修改B栈帧中的变量值。
package mainimport "fmt"func swap(a, b int) {a, b = b, afmt.Println("a:", a, "b:", b)
}func swap2(x, y *int) {*x, *y = *y, *x
}func main() {//var a int = 10//var p *int = &a////a = 100//fmt.Println("a=", a)////*p = 250 //借助a变量的地址,操作a对应空间//fmt.Println("a=", a)//fmt.Println("*p", *p)////a = 1000//fmt.Println("*p", *p)//var a int = 100//fmt.Println("&a=%p\n", &a)////var p *int = nil//p = &a//fmt.Println("p=%p\n", p)//fmt.Println("a=%d,*p=%d\n", a, *p)//*p = 324//fmt.Println("a=%d,*p=%d\n", a, *p)////var p *int在heap上申请一片内存地址空间//*p = 100//p = new(int) //默认类型的 默认值//fmt.Println("%q\n", *p)a, b := 10, 20swap(a, b) //传变量值fmt.Println("a:", a, "b:", b)swap2(&a, &b) //传地址值fmt.Println("a:", a, "b:", b)//函数传参:值传递//实参将自己的值(地址值)拷贝一份,给形参
}