go中的指针详解

因为大一的时候c语言没学好,所以看到指针很心烦 ,后来速成了一遍go ,每每写道指针部分就开始遗忘 ,所以专门对指针部分做了此笔记

概念

在 Go 语言中,指针是一种变量类型,它存储的是另一个变量的内存地址。通过指针,你可以访问和修改它指向的内存位置上存储的数据。这和 Java 中的引用类型变量(如对象的引用)有相似之处,因为它们都允许通过一个“引用”或“指针”来操作实际的数据。

指针是一个变量 和int int32 float32 uint64一样都是变量 只是该变量存储的是数据是地址

代码观察

/**
指针是变量 地址是变量的内存地址 是数据
指针可以理解为一个变量类型,可以指向其他变量的内存地址,通过指针可以修改其他变量的值。
如果传递一个非引用对象(java中的对象 java的对象名其实就是类似于指针的概念) 如果传递的是数据的话那么方法修改了 也不是会影响到原来的数据的
如果传递的是引用对象(java中的对象 java的对象名其实就是类似于指针的概念) 那么方法修改了 也会影响到原来的数据的
*/

func pointdemo() {a, b := 1, 2.34fmt.Println("输出变量a和b的值:")fmt.Println("a=", a, "b=", b)//输出:输出变量a和b的值:a= 1 b= 2.34fmt.Println("输出对应的地址:")fmt.Printf("a的地址:%p\n", &a)fmt.Printf("b的地址:%p\n", &b)//输出:a的地址:0xc00000a0d8
//b的地址:0xc00000a0f0// 创建指针var pA *int = &apB := &b//是一样的 所以可以发现 指针的地址是一样的/* 所以大一我就认为地址和指针是一个东西 导致后面接口 还有方法的时候会出很多问题
a的地址:0xc00000a0d8
b的地址:0xc00000a0f0
*/fmt.Printf("a的地址:%p\n", pA)fmt.Printf("b的地址:%p\n", pB)
//由于指针也是存储地址的变量 那么作为变量肯定也有自己的地址fmt.Printf("指针在取地址a的地址:%p\n", &pA)fmt.Printf("指针b的地址:%p\n", &pB)/*指针在取地址a的地址:0xc000060028指针b的地址:0xc000060030*/// 通过指针输出数据fmt.Println("通过指针输出a的值:", *pA)fmt.Println("通过指针输出b的值:", *pB)// 修改指针指向的数据*pA = 3*pB = 4.56fmt.Println("修改后的a和b的值:")//使用指针获取数值  对指针获取数据fmt.Println("指针方式a=", *pA, "b=", *pB)//使用地址获取数值 对地址获取数据fmt.Println("地址方式取数=", *(&a), "b=", *(&b))
/*这里就验证了指针可以通过*指针获取数据并且改变地址也可也可以通过这个符号改变 
*/*(&a) = 5*pB = 6.78fmt.Println("指针改变数值后a和b的值=", a, "b=", b)
}

错误笔记

上面讲了和java的类似 那么这里记录我的一个小错误

	fmt.Println("请输入一个字符串:")var input stringscanln, err := fmt.Scanln(&input)fmt.Println(input)

既然可以通过传递地址然后输入的数值赋予变量 那么我传递指针也是一样的吧?

	var name *stringfmt.Println("请输入一个字符串:")fmt.Scanln(name)fmt.Println("输入的数据:", *name)fmt.Println("输入的读取的单位数 这里是行为:", scanln)

运行
在这里插入图片描述
无效的地址指针
这里我就突然忘记了
指针既然是变量 那么是需要初始化的 不初始化只是有一个地址 地址没有指向任何一个空间 所以无法把输入的值传递给他 所以指针线初始化指向一个变量的地址 这里scan赋值过程就变成了 用户输入值->指针地址->找到指针装载的值(地址)->通过地址找到这个变量的内存空间进行修改

demo := "初始化"var name *string = &demofmt.Println("请输入一个字符串:")fmt.Scanln(name)fmt.Println("输入的数据:", *name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/23303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商业代理:利用代理服务器进行市场研究和竞争分析

代理是一种转换设备网络流量并从技术上使用户隐形的工具。个人使用它们来隐藏他们的在线活动并绕过地理限制。企业使用它们来支持他们的市场和竞争对手研究等。 继续阅读以了解代理的特点以及它们为企业研究工作带来的优势。 代理的主要功能 代理服务器是设备和网站服务器之间…

CentOS 7.8上安装ClamAV

在CentOS 7.8上安装ClamAV涉及几个步骤,包括安装ClamAV本身以及其命令行扫描工具和守护进程。以下是详细的安装指南: 1. 添加EPEL仓库 首先,确保已经安装了Extra Packages for Enterprise Linux (EPEL)仓库,因为ClamAV包在CentO…

Transformer学习(4)

上篇文章完成了Transformer剩下组件的编写,因此本文就可以开始训练。 本文主要介绍训练时要做的一些事情,包括定义损失函数、学习率调整、优化器等。 下篇文章会探讨如何在多GPU上进行并行训练,加速训练过程。 数据集简介 从网上找到一份中…

出图效率倍增!47个高质量的 Stable Diffusion 常用模型推荐

“选用适当的模型,随随便便出个图,都要比打上一堆提示词的效果要好。” 事实如此,高质量的模型,能够成倍提升出图质量。目前 CivitAI(俗称 C 站, https://civitai.com/ )是业内比较成熟的一个 …

什么是HTTPS协议,与HTTP协议有什么区别

HTTPS(超文本传输安全协议)是一种用于安全通信的网络协议,它是HTTP协议的安全版本。HTTPS通过在HTTP下层使用SSL/TLS协议来加密数据传输,从而保护数据的机密性和完整性,防止数据在传输过程中被窃听或篡改。 HTTPS的主…

虚拟机【VMware】与Windows之间不能复制粘贴的解决方法

对于刚安装的虚拟机 sudo apt update sudo apt upgrade设置 root密码 sudo passwd root安装 SSH   安装 SSH功能目的是让我们在 Windows下就可以直接通过 ubuntu的IP地址来访问 buntu并直接进入终端命令行。 安装命令:sudo apt-get install openssh-server 重启…

E10:流程主表表单字段值变化触发事件

效果– //window.WeFormSDK.showMessage("这是一个E10的提示", 3, 2); const onClickCreate () > console.log("create"); const onClickSave () > console.log("save"); const onClickCancel () > dialogComponent?.destroy();/…

如何学习提示词?

随着人工智能技术的飞速发展,AI已经成为我们生活中不可或缺的一部分。从智能助手到专业领域的应用,AI正在以前所未有的速度和规模改变着我们的工作与生活。而在AI的众多应用中,提示词(Prompt)的作用日益凸显。提示词&a…

【Python】 Python应用的最佳项目结构解析

基本原理 在Python开发中,一个清晰且结构化良好的项目布局对于项目的可维护性、可扩展性和团队协作至关重要。项目结构不仅影响代码的组织方式,还影响到开发流程和部署策略。一个优秀的项目结构应该能够方便地进行模块化开发,易于理解&#…

47、Flink 的 Data Source 原理

1.Data Source 原理 a)核心组件 一个数据 source 包括三个核心组件:分片(Splits)、分片枚举器(SplitEnumerator) 以及 源阅读器(SourceReader)。 分片(Split&#xff…

expect自动化交互应用程序工具

目录 安装 expect 语法介绍 基本命令 控制结构 变量和字符串 样例 expect 脚本 Example 1: 自动登录 SSH 并执行命令 Example 2: 自动与 FTP 服务器交互 Example 3: 与 telnet 自动交互 调试与运行脚本 调试模式 运行脚本 sshpass与expect应用-CSDN博客 expect 是…

第二证券炒股知识:美股的交易规则有哪些?

在经济全球化的浪潮中,美股以其开放的商场体系和完善的买卖规则吸引了不少出资者的关注。关于美股的买卖规则有哪些,第二证券下面就为大家详细介绍一下。 1、美股的买卖时刻:美股的买卖时刻依照美国东部时刻核算,分为夏令时和冬令…

elementUI el-table高度heght和总结summary 同时使用 表格样式异常

背景 同时使用height和 show-summary 样式错位 解决方案 在钩子函数updated 中重新渲染此表格 <el-table :height"autoHeight" show-summary ref"dataTable" >updated() {this.$nextTick(() >{this.$refs.dataTable.doLayout();})},更改后的效果 …

Java注解使用与自定义

一、什么是注解 注解是元数据的一种形式&#xff0c;它提供有关程序的数据&#xff0c;该数据不属于程序本身。注解对其注释的代码操作没有直接影响。换句话说&#xff0c;注解携带元数据&#xff0c;并且会引入一些和元数据相关的操作&#xff0c;但不会影响被注解的代码的逻…

导入地址表钩取技术解析

前置知识 导入表 在一个可执行文件需要用到其余DLL文件中的函数时&#xff0c;就需要用到导入表&#xff0c;用于记录需要引用的函数。例如我们编写的可执行文件需要用到CreateProcess函数&#xff0c;就需要用到kernel32.dll文件并且将其中的CreateProcess函数的信息导入到我…

项目-双人五子棋对战: 登录/注册模块的具体实现(2)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 模块详细讲解 用户信息定义(数据库) 用户名称: username 用户密码: password 用户天梯分数: score(假定初始值为1000) 用户游戏总场次: totalCount 用户获胜场次: winCount 用户表…

重复文件查找?6款电脑重复文件清理软件很靠谱!

在日常使用电脑过程中&#xff0c;很多人下载文件后常常会忘记它们的存在&#xff0c;导致同一份资料在系统中存在多个副本。虽然你可以手动删除 Windows 系统中的所有重复文件&#xff0c;但这样做很费时间&#xff0c;而且有可能会遗漏很多文件。 而且随着重复文件的不断累积…

IT运维工单系统/智能工单系统选型,需要注意哪些因素?

当今&#xff0c;IT运维服务成为企业降本增效、提升核心竞争力的重要一环。选型IT运维工单系统&#xff0c;提升企业IT运维服务能力&#xff0c;成为企业保持市场竞争力的重要举措。那么&#xff0c;IT运维工单系统选型需要注重哪些因素呢&#xff1f; 如今市面上的工单系统厂…

基于springboot实现餐饮管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现餐饮管理系统演示 摘要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率…

贴合客户发展阶段 定义观测服务路径 -- DeepFlow金融银行业可观测性方案发布

金融信创是金融机构重点投入以及技术迭代的方向,经过多年阶段迭代,进入难度更大的核心系统、关键业务系统的更替阶段。近日,云杉网络凭借其在云原生可观测性领域的深厚积累,正式发布了DeepFlow金融银行业可观测性方案及服务,解决行业中普遍存在的分布式交易系统保障难、平台双轨…