主页

go - 指针 - 指针地址和指针类型

2024-07-31 03:12PM

参考:https://www.topgoer.com/go/指针地址和指针类型

go语言中的指针

go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。go语言中的指针操作需要记住两个符号:&(取地址)和*(根据地址取值)。

指针地址和指针类型

每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。go语言重使用&符号放在变量前面对变量进行“取地址”操作。go语言中的值类型(int、float、bool、string、array、struc)都有对应的指针类型,如:*int、*int64、*string 等。

取变量指针的语法如下:

prt := &v // v的类型为T

v:代表被取地址的变量,类型为T。

ptr:用于接收地址的变量,ptr的类型为*T,称做T的指针类型。*代表指针 。

eg:

package main

import "fmt"

func main() {
  a := 10 // a是一个整型变量,值为10
  b := &a // b是一个指向a的指针变量,它的值是a的内存地址

  fmt.Printf("a:%d ptr:%p\n", a, &a) // &a是a本身的内存地址
  fmt.Printf("b:%p ptr:%p\n", b, b)  // b 的值 = a的内存地址,但是不代表b的内存地址就 = a的内存地址,b本身也有内存地址
  fmt.Println(&b)  // &b是b本身的内存地址
}

输出内容为:

a:10 ptr:0xc00001a0d8
b:0xc00001a0d8 ptr:0xc00001a0d8
0xc000012028

b := &a 的图示为: 

返回>>

登录

请登录后再发表评论。

评论列表:

目前还没有人发表评论