自学内容网 自学内容网

golang学习6-指针

指针就是地址。 指针变量就是存储地址的变量。
*p:解引用、间接引用。
栈帧:用来给函数运行提供内存空间。取内存于 stack 上。

当函数调用时,产生栈帧。函数调用结束,释放栈帧。

栈帧存储:1.同部变量。2.形参。(形参与局部变量存储地位等同)3.内存字段描述值 

 

 

变量存储:
等号 左边的变量,代表 变量所指向的内存空间。
等号 右边的变量,代表 变量内存空间存储的数据值。

指针的函数传参。
传地址(引用):将形参的地址值作为函数参数、返回值后传递,
传值(数据据):将实参的 值 拷贝一份给形参。

传引用:在A栈帧内部,修改B栈帧中的变量值。

package main

import "fmt"

func swap(a, b int) {
a, b = b, a
fmt.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, 20
swap(a, b) //传变量值
fmt.Println("a:", a, "b:", b)

swap2(&a, &b) //传地址值
fmt.Println("a:", a, "b:", b)
//函数传参:值传递
//实参将自己的值(地址值)拷贝一份,给形参
}


原文地址:https://blog.csdn.net/m0_52484587/article/details/144011467

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!