【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)基本数据类型,都有对应的指针类型,形式为*数据类型

相关推荐
圣殿骑士-Khtangc2 分钟前
Go-Kubernetes-CRD自定义资源开发从零实现Operator模式
golang
Larcher14 分钟前
从 SDD 到可交付:我如何用规范驱动 AI 做出一个 Chrome 翻译插件
前端·后端·架构
宸津-代码粉碎机18 分钟前
FastUtil+AI多Agent实战:Java AI项目性能终极加速方案
java·服务器·开发语言·python·安全·php
choumou_M31 分钟前
SpringBoot_5:商品秒杀场景的并发实践(初步)
java·spring boot·后端
Python私教34 分钟前
Python 3.15 来了:free-threading 稳定 ABI 能给高并发服务带来什么
开发语言·python
陈明勇1 小时前
Go 1.27 重磅发布:泛型方法落地、分配性能跃升,JSON v2 正式可用
后端
Zane19941 小时前
create_task 和直接 await 到底有什么不一样?asyncio 的 Task、gather 与并发数量控制
后端·python
喜欢吃豆2 小时前
5 分钟,让网页里站着一个会说话的 3D 数字人
后端
Python私教2 小时前
创业团队做管理系统,别先堆页面:我把 14 个问题做成了需求门禁
后端·python·架构
攻城有术2 小时前
专项攻克-SpringBoot启动后 Bean的实例数量问题
java·spring boot·后端