您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

关于Golang 指针理解

2025/12/5 16:34:25发布31次查看
下面由golang教程栏目给大家介绍关于golang 指针理解 ,希望对需要的朋友有所帮助!
0x00 指针地址和指针类型
一个变量对应一个保存了变量对应类型值的内存空间,一个指针的值是另一个变量的地址,指针变量可以指向任何一个值的内存地址。
取地址符号 &
在指针类型前加上 * 号,可以获取指针所指向的内容,它是一个类型更改器,使用一个指针引用一个值称为间接引用。
prt := &v    // v 的类型为t
v 表示被取地址的变量,prt 接收 v 的地址,prt 的类型为 *t,称为 t 的指针类型。
0x01 从指针获取指针指向的值
使用 & 对变量进行取地址之后,获得这个变量的指针,可以对指针使用 * 号来获取这个指针指向的值,称为指针取值。
temp := test contentprt := &tempfmt.println(*prt)   // 打印 test content
变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:
对变量进行取地址(&)操作,可以获得这个变量的指针变量。
指针变量的值是指针地址。
对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。
0x02 使用指针修改值
使用 * 对指针指向的值进行修改和操作
x, y := 1, 2fmt.println(x, y)  // 1 2j, k := &x, &y*j, *k = *k, *jfmt.println(x, y)  // 2 1
* 操作符的根本意义就是操作指针指向的变量。当操作在右值时,就是取指向变量的值;当操作在左值时,就是将值设置给指向的变量。
如果只是对引用的指针进行交换,那么对被引用的变量,值和地址都是不会影响,受影响的只是应用的指针。
x, y := 1, 2fmt.println(x, y)  // 1 2j, k := &x, &yj, k = k, jfmt.println(x, y)    // 1 2fmt.printf(x : %p, y :  %p \n, &x, &y)  // x : 0xc00001a088, y :  0xc00001a090fmt.printf(j : %p, y :  %p \n, j, k)  //j : 0xc00001a090, y :  0xc00001a088
x, y 值和地址都不影响,指针j, k 交换之后,j, k 的值交换了。
0x03 返回函数中局部变量
在go语言中,返回函数中局部变量的地址也是安全的,例如下面的代码,调用f函数时创建局部变量v,在局部变量地址被返回之后依然有效,因为指针p依然引用这个变量
var p = f()func f() *int {    v := 1    return &v}
0x04 使用 new() 创建指针
temp := new(int) *temp = 123 fmt.println(*temp)  // 123 fmt.println(temp)  //  0xaabb
0x05 flag包的指针技术
指针是实现标准库中flag包的关键技术,它用来实现命令行的标志解析。
例子:
package mainimport (    flag    fmt    strings)var n = flag.bool(n, true, print test)var sep = flag.string(s,  , separator)var test = flag.string(test,  , 测试)func main() {    flag.parse()    fmt.println(strings.join(flag.args(), *sep))    if *n {        fmt.println(*test)    }}
运行
$ go run main.go --helpusage of /var/exe/main:  -n print test  -s string     separator (default  )  -test string     测试 (default  )exit status 2$ go run main.go -s +  --test 测试文本 a bc def 123a+bc+def+123$ go run main.go -s + -n --test 测试文本 a bc def 123a+bc+def+123测试文本
以上就是关于golang 指针理解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product