当前位置: 首页 > article >正文

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)
	//函数传参:值传递
	//实参将自己的值(地址值)拷贝一份,给形参
}


http://www.kler.cn/a/409171.html

相关文章:

  • 探索智能时代:从AI生成PPT到自动化未来
  • 【Elasticsearch入门到落地】2、正向索引和倒排索引
  • C++自动化测试:GTest 与 GitLab CI/CD 的完美融合
  • 如何做鸿蒙系统里的App开发需要哪些技术栈
  • Node.js 安装与环境配置详解:从入门到实战
  • 数据结构(顺序队列——c语言实现)
  • pytorch torch.sign() 方法介绍
  • CTF之密码学(培根密码)
  • SpringBoot集成多个rabbitmq
  • 安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!
  • C++结构型设计模式之桥接模式
  • C# 数据结构之【树】C#树
  • 显示类控件
  • 深度学习中的长短期记忆网络(LSTM)与自然语言处理
  • [AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现
  • 数据结构 ——— 直接选择排序算法的实现
  • springboot 使用笔记
  • selinux及防火墙
  • 力扣11.22
  • 【SSMS】【数据库】还原数据库