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 的图示为:
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论