指针的定义
A pointer is a value that points to the memory address of another variable.
指针是一个指向另一个变量内存地址的值。
示例 1
package mainimport ( "fmt")func main() {
a := 200
b := &a
fmt.Println("a -->", a)
fmt.Println("*b -->", *b)
fmt.Println("&a -->", &a)
fmt.Println("b -->", b)
*b++
fmt.Println("a -->", a)
fmt.Println("*b -->", *b)
}变量 a 的值是 200,变量 b 的值就是变量 a 的内存地址。b 就是一个指针,它指向 a 所在的内存地址。
*b++是对变量 b 指向的内存地址取值后再对该值加 1,即变量 a 的值加 1,执行结果如下:
a --> 200 *b --> 200 &a --> 0xc4200160b0 b --> 0xc4200160b0 a --> 201 *b --> 201
示例 2
package mainimport ( "fmt")type packet struct {
id int
size int}var (
p packet
q *packet
)func main() {
p = packet{
id: 1,
size: 2,
}
q = &p
fmt.Println("p -->", p)
fmt.Println("q -->", q)
fmt.Println("*q -->", *q)
fmt.Println("&p -->", &p)
fmt.Println("&q -->", &q)
fmt.Println("p.size -->", p.size)
fmt.Println("(*q).size -->", (*q).size)
fmt.Println("q.size -->", q.size)
}首先定义了一个结构类型
packet,又声明了两个变量 p 和 q,p 是一个普通packet结构,q 则是一个packet类型的指针。初始化 p,q 的值是 p 的地址,即 q 是一个指向 p 内存地址的指针。
执行结果如下:
p --> {1 2} q --> &{1 2} *q --> {1 2} &p --> &{1 2} &q --> 0x113e040 p.size --> 2 (*q).size --> 2 q.size --> 2(*q).size是先对 q 所指的内存地址取值,即 p 的值,p 的 size 字段值为 2。q.size是直接对 q 指向的内存地址的 size 字段取值,结果与上面一样。从执行结果可以看出,q 的值是对 p 进行取地址操作。
*q是对 q 指向的内存地址取值,即 p 的值。&q是指针 q 所在的内存地址。这里需要注意的是,
(*q).size和q.size结果一样。
参考资料:Understand Go pointers in less than 800 words or your money back
作者:LLLeon
链接:https://www.jianshu.com/p/e0250d739f37
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦