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

【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


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

相关文章:

  • 计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)
  • python | 输入日期,判断这一天是这一年的第几天
  • 基于CPLD电力/轨道交通3U机箱开关量输出板(DO)
  • KV 缓存简介
  • 最长最短单词(信息学奥赛一本通-1143)
  • 京东Taro小程序原生端接入操作
  • 第四十八篇——数学和其它学科:为什么数学是更底层的工具?
  • provide/inject源码实现
  • 光猫 和 全光 WiFi
  • conda、poetry,pip相关
  • vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
  • SOC与电压的关系
  • [新能源]新能源汽车快充与慢充说明
  • GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法
  • Python学习第十九天
  • C++初阶——类和对象(四) 拷贝构造函数、赋值运算符重载函数
  • 单元测试、注解
  • EasyExcel动态拆分非固定列Excel表格
  • ZVA-Z90,罗德与施瓦茨毫米波变换器
  • 边缘端设备开发流程全解