写点什么

【一 Go 到底】第五天 --- 指针

作者:指剑
  • 2022 年 10 月 05 日
    重庆
  • 本文字数:862 字

    阅读完需:约 3 分钟

【一Go到底】第五天---指针

一、基本介绍

  • 基本数据类型,变量存储的就是值,也叫值类型

  • 获取变量地址,使用 & ,例如 &i 取 i 变量的地址

  • 指针类型表示方式 var i *int = &j

  • 获取指针类型所指向的值, 使用* ,例 var ptr *int,想获取 ptr 指向的值,应*ptr


package main
import "fmt"
func main() {
// 基本数据类型在内存布局 var i int = 10
// i的地址 &i fmt.Println("i的地址为:", &i)
// ptr 是一个指针变量 // ptr 的类型为 *int // ptr 原本的值为 &i var ptr *int = &i fmt.Println("ptr = ", ptr)
// prt 地址 fmt.Println("prt 地址:", &ptr)
// ptr 指向的值 // 这里是先取 ptr的值(存储的i的地址),然后再取对应地址的值 fmt.Println("ptr 指向的值为:", *ptr)}
复制代码

二、案例演示

2.1 案例一

  • 写一个程序,获取一个 int 变量的 num 的地址

  • 将 num 地址赋值给指针 ptr,并通过 ptr 修改 num 值


package main
import "fmt"
func main() {
// 写一个程序,获取一个int变量的num的地址 var num int = 300 //将num地址赋值给指针ptr,并通过ptr修改num值 var ptr *int = &num *ptr = 101
fmt.Println("num address: ", &num) fmt.Println("ptr = ", *ptr)}
复制代码


输出


go run .\pointer_demo.gonum address:  0xc000012098ptr =  101
复制代码

2.2 案例二

package main
import "fmt"
func main() {
var a int = 1001 var b int = 2001 var ptr *int = &a *ptr = 1011 ptr = &b *ptr = 2011 fmt.Printf("a=%v, b=%v, ptr=%v", a, b, *ptr)}
复制代码


输出


> go run .\pointer_demo.goa=1011, b=2011, ptr=2011
复制代码

三、指针使用注意事项

  • 指针变量的类型必须匹配,例:


package main
import "fmt"
func main() {
var i int = 100 //错误示范 var ptr *float64 = &i //正确操作 var ptr *int = &i}
复制代码


  • 值类型,都有对应的指针类型,形式为 *数据类型,比如 int 的对应的指针就是*int, float32 对应的指针类型就是*float32, 依次类推。

  • 值类型包括:基本数据类型 int 系列,float 系列, bool, string, 数组和结构体 struct

发布于: 刚刚阅读数: 3
用户头像

指剑

关注

InfoQ签约作者 2022.07.13 加入

AWS Community Builder,AWS Student Ambassador,阿里云专家博主,OPS社区创始成员

评论

发布
暂无评论
【一Go到底】第五天---指针_Go_指剑_InfoQ写作社区