【Go】三、Go指针

文章目录

1、指针

  • &符号+变量 就可以获取这个变量内存的地址
  • *int 是一个指针类型 (可以理解为 指向int类型的指针)
go 复制代码
package main
import(
        "fmt"
)
func main(){

        var age int = 18
        //&符号+变量 就可以获取这个变量内存的地址
        fmt.Println(&age) //0xc0000a2058
        
        //定义一个指针变量:
        //var代表要声明一个变量
        //ptr 指针变量的名字
        //ptr对应的类型是:*int 是一个指针类型 (可以理解为 指向int类型的指针)
        //&age就是一个地址,是ptr变量的具体的值
        var ptr *int = &age

		//这样直接输出,是ptr这个指针变量的值,即0xc0000a2058
        fmt.Println(ptr)
        
        //ptr这个指针变量自身的地址
        fmt.Println("ptr本身这个存储空间的地址为:",&ptr)
        
        //想获取ptr这个指针或者这个地址指向的那个数据:
        fmt.Printf("ptr指向的数值为:%v",*ptr) //ptr指向的数值为:18
}
  • & 取内存地址
  • * 根据内存地址取值

2、说明

1)可以通过指针去改变它指向的那个变量的值

go 复制代码
func main(){
        var num int = 10
        fmt.Println(num)	//10
        var ptr *int = &num
        *ptr = 20
        fmt.Println(num)	//20
}

2)指针变量接收的一定是地址值

go 复制代码
//正确写法
var ptr *int = &num

3)指针变量的地址不可以不匹配

go 复制代码
func main(){
        var num int = 10
        fmt.Println(num)	//10
        var ptr *float32 = &num
}

编译报错:cannot use &num(type *int) as type float32 in assignment。因为float32意味着这个指针指向的是float32类型的数据,而&num对应一个int类型的变量

4)基本数据类型,都有对应的指针类型,形式为*数据类型

相关推荐
猪猪拆迁队33 分钟前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库1 小时前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横1 小时前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885021 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan2 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885022 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia2 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530142 小时前
Java 实现 Word 文档加密与权限解除
java·后端
vanuan2 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端
Yeats_Liao2 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构