go语言指针

USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计 USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系 阅读详情

go语言指针 原文参考:https://www.liwenzhou.com/posts/Go/07_pointer/

//指针
func main() {
	a := 10
	b := &a   //这里b是一个int类型,存放的地址是一个16进制数字//b变量的内存地址中存的是a的指针
	fmt.Printf("a:%d,prt:%p\n", a, &a) //这里%d打印的是a的值,%p打印的是a变量的值对应的内存地址,a==>10==>&a 这其中有上下层关系.
	fmt.Printf("b:%p,type:%T\n", b, b) //%p打印的是b内存地址中存的a的内存地址,打印b的类型.
	fmt.Println(&b)                    //这里打印变量b的指针,

}

输出结果:
C:\Users\34826\AppData\Local\Temp\___go_build_code_oldboy_com_studygolang_05lesson5_lesson1.exe #gosetup
a:10,prt:0xc0000a2058
b:0xc0000a2058,type:*int
0xc0000cc018

指针取值

//指针取值
func main() {
	a := 10
	b := &a                          //这里&a是一个十六进制的int类型值
	fmt.Printf("type of b:%T\n", b)  //这里b对应的是一个&a那么表示b是一个指针类型,int类型的指针
	c := *b                          //这里将取值后的b赋值给c,那么c就是一个int类型
	fmt.Printf("type of c:%T\n", c)  //这里打印c的类型为int
	fmt.Printf("value of c:%v\n", c) //c的值是10,取出的是b内存地址中存的a的内存地址.a内存地址对应的值是10.那么最终取值就是10,(反正他喵的记住*代表取值就对了.取出来的不是内存地址.是值
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_code_oldboy_com_studygolang_05lesson5_lesson1.exe #gosetup
type of b:*int
type of c:int
value of c:10

总结: 取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:

对变量进行取地址(&)操作,可以获得这个变量的指针变量。
指针变量的值是指针地址。
对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值

指针传参

func modify1(x int) {
	x = 100

}
func modify2(x *int) {
	*x = 100
}
func main() {
	a := 10
	modify1(a)
	fmt.Println(a) //go语言传值是通过副本进行传递的.呢么当副本传递进函数之后处理过后的值跟之前定义变量的值是不冲突的.这俩不是一个东西.好比传值的时候拷贝了一个进去,
	modify2(&a)//这里传值是传递的指针类型.表示将a变量的值的内存地址传递进了函数中.然后函数接受的也是指针类型,那么在处理完成后a的值就由原来的10,变成了100.
	fmt.Println(a)

//输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_code_oldboy_com_studygolang_05lesson5_lesson1.exe #gosetup
10
100

new和make的用法1

//先看一个错误的例子
func main() {
	var a *int  //这里声明了a是一个*int类型,也就是说a是一个指针类型
	*a = 100 //这里的用法就是错误的.*a是用来取内存地址中存的指针的值的,而不能直接将*a进行赋值
	fmt.Println(*a) //这里打印的是a内存地址中存的值.很明显是不行的

	var b map[string]int  //这里尚未初始化map,所以内存中并未分配内存地址.
	b["沙河娜扎"] = 100  //所以这里的复制是不正确的.
	fmt.Println(b)  //打印也是失败的.
}

输出错误结果
D:\Go\bin\go.exe build -o C:\Users\34826\AppData\Local\Temp\___go_build_main_go.exe D:/Go/Go/src/code.oldboy.com/studygolang/05lesson5/lesson1/main.go #gosetup
C:\Users\34826\AppData\Local\Temp\___go_build_main_go.exe #gosetup
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x0 pc=0xb655aa]

goroutine 1 [running]:
main.main()
        D:/Go/Go/src/code.oldboy.com/studygolang/05lesson5/lesson1/main.go:983 +
0x2a
-----------------------------------------------------
//正确过程
func main() {
	var a *int  //同样a 是一个int类型的指针,只能存指针类型.
	c := 100  
	a = &c  //将c变量的内存地址存入到预先声明好的a内存地址中.
	fmt.Println(*a) //打印a输出正确.

	var b = make(map[string]int)  //这里map进行初始化完成,在内存中分配了内存空间,所以后续才可以进行键值对写入操作
	b["沙河娜扎"] = 100  //这里直接写入键值对.
	fmt.Println(b) //打印成功

输出结果如下
C:\Users\34826\AppData\Local\Temp\___go_build_main_go.exe #gosetup
100
map[沙河娜扎:100]


}

new函数的使用

func main() {
	a := new(int)         //a初始化成一个*int类型,是一个指针
	b := new(bool)        //同理b初始化成一个bool类型,也是一个指针.
	fmt.Printf("%T\n", a) // *int
	fmt.Printf("%T\n", b) // *bool
	fmt.Println(*a)       // 这里取到的值是0.int类型默认的值就是0(记住啦* 是他娘的取值用的.)
	fmt.Println(*b)       // false  同理bool默认值是false (取值,取的是new函数指针定义号类型的零值)
	var c *int            //这里只声明一个c 为一个int类型的指针,并未初始化,那么就不会在内存中分配空间
	c = new(int)          //这里将c 初始化成一个指针类型.
	*c = 10               //取值c的内存地址,然后将10赋值给这个内存地址
	fmt.Println(*c)       //取值c并打印
}
输出结果
C:\Users\34826\AppData\Local\Temp\___go_build_code_oldboy_com_studygolang_05lesson5_lesson1.exe #gosetup
*int
*bool
0
false
10
其实new函数用的比较少.

说明:

  1. 二者都是用来做内存分配的。
  2. make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;
  3. 而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

 

第14.8章 高翔博士最新开源框架Lightning-LM源码解读(八):位姿平滑器PoseSmoother深度剖析,从原理到代码实现 本文深度解析了高翔博士开源框架Lightning-LM中的位姿平滑器PoseSmoother模块。该模块通过设置平滑因子,在保证位姿准确性的同时减少突变,使位姿变化更平稳。文章详细讲解了模块功能、数据流程和核心代码实现,包括构造函数、拷贝构造函数以及关键的PushDRPose和PushPose函数。重点分析了位姿平滑算法原理,涉及运动有效性校验、位姿队列维护和平滑因子调节等核心机制。此外还介绍了相关C++语法(如显式构造函数、默认拷贝构造)和优化方向。本解析为SLAM学习者提供了位姿平滑处理的实用实现范例。 阅读详情

相关推荐

RC模型车多电机驱动方案:从电调PWM原理到四电机安全连接实战

在电机控制领域,PWM(脉冲宽度调制)是实现精确调速的核心技术。其原理是通过调节固定周期内高电平的脉宽来编码控制指令,进而驱动电子调速器(电调)改变输出功率。这项技术对于需要多电机协同工作的场景,如RC模型车的差速转向或重型负载驱动,具有关键价值。它能实现动力的精细分配与同步,提升车辆的可控性与通过性。在实际应用中,为确保系统稳定,必须关注电流分配与信号同步问题。例如,通过为每个电机配备独立电调并采用信号并联(Y线)的方式,可以构建可靠的四电机驱动系统。这种方案能有效避免因单个电调过载或电机反电动势不一致导

weixin_30664615的博客 381

Go快速入门总结

const 通常用来定义枚举类型 函数的多返回值的三种写法 init方法调用流程与import导包路径 指针 交换数字值 defer语句调用顺序 表示一个函数在执行之后,结束之前执行的时机 输出 数组和动态数组 切片中声明定义方式 map的使用 面向对象 结构体 class 面向对象表示与封装 面向对象的继承 面向对象的多态实现 空接口的含义 interface: 反射 pair 反射用法 结果: 反射解析结构体中标签Tag 主要作用是解释说明,在不同的包中有不同的作用

yuluo的博客 2116

右腿驱动电路设计:从共模干扰原理到生物电采集实战

在生物电信号采集领域,共模干扰是影响测量精度的核心挑战之一,其本质源于环境电磁场通过容性耦合在人体表面产生的感应电流。根据欧姆定律,由于人体组织阻抗的不均衡性,共模电流会在不同测量点产生差异化的压降,从而转化为难以滤除的差分噪声。为解决这一问题,右腿驱动技术应运而生,它通过负反馈原理主动抵消干扰,显著提升系统的共模抑制比。该技术广泛应用于心电图、脑电图等医疗电子设备中,是确保微弱生理信号质量的关键环节。本文结合工程实践,深入剖析了右腿驱动电路中的仪表放大器选型、反馈环路稳定性设计以及PCB布局布线要点,为高

weixin_31476015的博客 442

go语言在vscode中报错Build Error: go build -o d:\gocode\__debug_bin4262970589.exe -gcflags all=-N -l . go:

终端输入下它后,再运行,成功了,但是比较慢,而且红色的错误还是消失。发现需要用go mod。go mod init 项目名。

weixin_47341561的博客 2695

【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例

一起用R语言给nba球星画球技雷达图吧!

池塘春草梦的博客 6252

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文深入解析了OpenCV图像去畸变的原理与实战技巧,详细对比了标准透视、鱼眼及全能型omnidir三种校正函数的核心参数调优方法。通过分析alpha、balance、centerX/Y及focalScale四大参数对输出效果的影响,并结合完整代码与效果对比图,帮助开发者精准校正镜头畸变,提升计算机视觉任务精度。

weixin_29046611的博客 341

go 初学 编译!!

一。go build 生成exe 文件 然后运行 exe 文件 如图(推荐) 二 直接go run xx.go 文件后台自动 编辑运行 如图 三 编译成其他名称 go build -o 其他名称 原go文件 如图 注意事项: 以go 为扩展名, 程序的执行入口市main函数 样严格区分大小写 “{}” 成对出现 不能有多余的变量或者包,不然编译不通过 ...

qq_27743015的博客 507

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

windows gcc 安装

windows gcc 安装 场景: gorm 例子报错 Build Error: go build -o d:\Go\gorm\__debug_bin.exe -gcflags all=-N -l . # runtime/cgo cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH% (exit status 2) GCC 搜索 https://gcc.gnu.org/ https://osd

ywtech的博客 1092

Zabbix-获取客户端的SNMP数据

网口状态(ifOperStatus)的 OID 是1.3.6.1.2.1.2.2.1.8,查询时需要用1.3.6.1.2.1.2.2.1.8.1(第 1 个网口)、1.3.6.1.2.1.2.2.1.8.2(第 2 个网口)等。表格对象是指 “包含多个同类实例的对象”(如设备的多个网口、多个进程等,每个实例需要单独标识)。在 SNMP 规范中,标量对象的完整 OID 必须以.0结尾,.0是标量对象的唯一实例编号。标量对象是指 “单一值的对象”(如设备的名称、温度、状态等,整个设备只需要一个值来表示)。

徐子元 1726

Codex 接入国产大模型指南:客户端与 CLI 双端实战

CC Switch是目前最流行的 Codex / Claude Code 模型切换工具,内置了协议转换功能,支持几乎所有主流国产模型。核心原理Codex → 本地 8317 端口(CC Switch)→ 协议转换 → 国产模型 API整个过程对 Codex 完全透明,Codex 以为自己在跟标准的 Responses API 对话。用户类型推荐方案理由新手 / 不想折腾配置简单,免费额度够用追求稳定体验通义千问(原生接入)官方兼容,功能最完整企业用户自建 AI 网关可控性强,支持多用户管理预算有限。

篮球界最会写bug的人;程序猿中打球最菜的人。 574

vscode调试报错:Build Error: go build -o XXX\src__debug_bin.exe -gcflags all=-N -l .

vscode编译go程序

u013352076的专栏 1768

2025年9月GESP(C++四级):排兵布阵

作为将军,你自然需要合理地排兵布阵。地图可以视为n行m列的网格,适合排兵的网格以 1 标注,不适合排兵的网格以 0 标注。现在你需要在地图上选择一个矩形区域排兵,这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格?

王老师青少年编程 1380

【Golang】Go语言指针

本文介绍了Go语言中指针的特性与使用方法。主要包含以下内容:1) Go指针是安全指针,不支持偏移和运算,仅支持取址(&)和取值(*)操作;2) 详细说明了指针地址、指针类型和指针取值的概念与语法;3) 介绍了空指针判断方法;4) 对比讲解了new和make函数的区别:new用于类型内存分配并返回指针,make仅用于slice/map/channel初始化并返回引用类型本身。文章通过代码示例演示了指针传值、空指针处理以及new/make的实际应用场景。

weixin_73059729的博客 1262

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

golang定义空指针_Go 语言指针

Go 语言指针Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。接下来让我们来一步步学习 Go 语言指针。我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址。Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。以下实例演示了变量在内存中地址:实例package mainimport "fmt"func main() {var a...

weixin_35620886的博客 548

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

go语言指针和C指针区别,golang指针与C指针的异同

总结一下golang中的指针与C语言的指针的用法。总体一致:C的代码:int *number;number = (int*) malloc(sizeof(int));*number = 3;printf("%d\n", *number);golang的代码:var pointer *int;pointer = new(int);*pointer = 3;fmt.Println(*pointer);...

weixin_42628280的博客 518

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

golang定义空指针_Go语言指针声明及操作方法

指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。一个指针变量指向了一个值的内存地址。Go语言支持指针类型*T,指针的指针**T,以及包含包名前缀的*package.T。指针声明在指针类型变...

weixin_32309649的博客 2002

Golang基础语法(go语言指针、go语言方法、go语言接口、go语言断言)

Go语言指针与方法摘要: 指针是存储变量内存地址的特殊变量,通过*声明指针变量,&获取地址。指针大小取决于系统位数(32位4字节/64位8字节)。创建指针可通过直接声明或new()函数,后者会自动分配内存。 方法是绑定到特定类型的函数,定义时在func和方法名之间添加接收者(值或指针类型)。方法调用通过.操作符完成,支持指针和值类型的隐式转换。Go通过结构体组合实现"继承",子结构体内嵌父结构体即可继承其属性和方法。 接口是一组方法声明的集合,任何实现全部方法的类型即实现了该接口

Atticus的博客 936

【Golang 基础】Go 语言的指针

Go 语言的指针   变量是一种使用方便的占位符,用于引用计算机地址,而在 Go 语言中可以通过 &符号获取一个变量在计算机中对应的内存地址。 package basic import "fmt" func main(){ a := 1 fmt.Println(&a) // 0xc4200180a0 }   一个指针变量指向了一个值的内存地址。Go 语言中的指针语法与 C...

hvkCoder的博客 316

Go语言自学系列 | golang指针

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无需拷贝数据。 类型指针不能进行偏移和运算。 Go语言中的指针操作非常简单,只需要记住两个符号:&(取

团爸讲算法 1657

Golang学习笔记(四)——Go语言的指针

Go语言中的指针和C/C++ 中的指针用法基本相似。 指针(pointer)在Go语言中可以被拆分为两个核心概念: 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指向起始元素的原始指针、元素数量和容量组成。 受益于这样的约束和拆分,Go语言的指针类型变量即拥有指针高效访问的特点,又不会发生指针偏移,从而避免了非法修改关键性数据的问题。同时,垃圾回收也比较容易对不会发生偏移的指针进行检索和回收。 1.认识指针地址和指针类型

yushuaigee的博客 422

Go语言自学系列 | golang结构体指针

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 结构体指针和普通的变量指针相同,我先来回顾一下普通变量的指针,例如: package main import "fmt" func main() { var name string name = "tom"

团爸讲算法 2313

【Go】Go 语言指针

文章目录一、前言二、变量的地址三、指针及其声明四、指针的使用五、Go 空指针六、 指针数组七、指向指针的指针八、向函数传递指针参数参考链接 一、前言 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 二、变量的地址 Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 以下实例演示了变量在内存中地址: package main import "fmt" func main() { var a int = 10 fmt.Pr

weixin_44211968的博客 3308

Go语言指针

Go语言指针 GO语言学习教程 www.lsdcloud.com 指针相关概念 指针核心概念 指针不能进行偏移和运算,是安全指针。 切片,由指向起始元素的原始指针、元素数量和容量组成。 内存描述 我们在编程的时候,实际上就是在操作内存,除非是进行IO操作写磁盘。 C语言课程是我大学的第一门编程语言课程,其中最难的部分就是指针,而指针就是直接操作内存的,所谓的C语言是最接近底层的语言,其中很重...

ourLang 2万+

go语言指针和C指针区别,golang中值类型/指针类型的变量区别总结

前言值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址指针类型:简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go...

weixin_28235513的博客 522

语言里的指针中的值_Golang语言情怀第9期 Go 语言指针

Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。Go语言的指针,基本上只剩下用于区分 byref 和 byval 语义。运算符就是简单的 & 和 * 一个取地址、一个解析地址。packagemainimport("fmt")funcmain(){va...

weixin_32864391的博客 130
上一篇: 函数
下一篇: go语言结构体
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值