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

【Go】go语言指针

指针基本概念

指针定义:指针是存储变量内存地址的变量
通过这句话我们可以了解到,指针也是一个变量,它有自己的地址,它的值为其它的变量的内存地址。

声明方式:var p *int (声明一个指向int类型的指针)

操作符:

&:获取变量的地址,例如 p = &a

*:解引用指针,获取指针指向的值,例如 *p = 10

package main

import "fmt"

// 此处开始编写代码
func main() {
	var a int = 100
	var p *int
	p = &a
	fmt.Printf("a变量的地址是:%x\n", &a)
	fmt.Printf("p的值是:%x\n", p)
	fmt.Printf("p的地址是:%x\n", &p)
	fmt.Println("a的值为:", a)
	//通过指针访问值
	fmt.Println("解引用指针p得到a值为:", *p)
	//通过指针修改值
	*p = 500
	fmt.Println("a的值为:", a)
	fmt.Println("解引用指针p得到a值为:", *p)
}
/*
a变量的地址是:c0000a6058
p的值是:c0000a6058
p的地址是:c0000ca018
a的值为: 100
解引用指针p得到a值为: 100
a的值为: 500
解引用指针p得到a值为: 500
*/

空指针nil

空指针:未初始化的指针值为nil,解引用会触发panic。
当一个指针被定义之后,没有分配任何变量,那么它的值就是nil
nil在概念上和其它语言null、None都是一样的,指零值或空值。

package main

import "fmt"

// 此处开始编写代码
func main() {
	var ptr *int
	if ptr == nil {
		fmt.Println("ptr为空指针")
		//fmt.Println("ptr:", *ptr) panic: runtime error: invalid memory address or nil pointer dereference
		//避免空指针解引用:使用前检查是否为nil。
	}
}

Go语言指针的限制

go语言的指针不能参与运算
不同类型的指针不允许相互转换
不同类型的指针不能比较和相互赋值

但是go语言提供了绕过这些限制的方法:unsafe

相关文章:

  • 表达式引擎之通用的开屏页后端接口设计
  • 需要使用新应用以打开此ms-gamingoverlay链接怎么解决
  • 【FPGA】——实现六位流水灯
  • Oracle底层原理解析
  • JS | JS中的日期和时间的获取方法
  • 二阶近似 是什么意思
  • Web开发-PHP应用文件操作安全上传下载任意读取删除目录遍历文件包含
  • 字符串p型编码(信息学奥赛一本通-1145)
  • 理解我们单片机拥有的资源
  • 【操作系统安全】任务4:Windows 系统网络安全实践里常用 DOS 命令
  • linux系统——创建swap分区和移除磁盘
  • ftp替代品,如何提升数据交换的安全性与高效性?
  • css3有哪些新属性
  • 它,让机器人与HMI屏无缝对接
  • STM32输入捕获采集超声波模块HC-SR04响应的高电平
  • 问deepseek: 如何处理CGNS网格文件里,多个zone之间的链接数据
  • Java:引用其他类的方法
  • 09-ArcGIS For JavaScript -- 基于ThreeJS实现动态GLTF模型加载
  • 如何在AI时代处理 PDF
  • RabbitMQ 全面详解(附面试重点)
  • 现场聆听总书记讲话,“00后”博士和大模型CEO都“热血沸腾”
  • 中办、国办印发《安全生产考核巡查办法》
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 海南儋州市委副书记任延新已赴市人大常委会履新
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 榆林市委常委王华胜已任榆林市政协党组书记