在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
结合这个例子分析一下 结果: 结合以往C语言的基础,画了一张图来解释为什么会有上面这些值的出现。先查看下Go中的这两个运算符是啥吧。 ①对于所有带a的结果 var a int = 1 定义了一个变量a值为1,如下图所示: &a就是这个存放a变量值的地址 *&a 就是指向&a的一个指针,*&a = a = 1 ②所有带b结果 var b *int = &a 类似C语言的 int *b = &a 定一个指向整形变量的指针b,b指向了a的地址 所以: b = &a = 0xc04203c1d0 &b = 0xc042058018 &b是b这个指针变量的真实地址,就是执行后那个 *&b = *(&b) = b = &a = 0xc04203c1d0 *b = *&a = a = 1
③所有带c的结果 如上图所示: var c **int = &b 实际上是定义了一个指向整形指针的指针变量 c = &b = 0xc042058018 *c = *&b = b = &a = 0xc04203c1d0 &c 是这个变量的真实地址,这里显示的就是运行的结果 0xc042068020 *&c 有经验可以发现 *&直接消掉了 = c = 0xc042058018 **c咋一看不知道是什么,其实可以通过换算来进行求值 **c = **&b = *b = *&a = a = 1 ***&*&*&*&*&c 这个可以先消去*& **c = 1
④关于x x = *b = *&a = a = 1 以上总结一下: &通过变量取地址 * 通过地址取值 &a先得到地址,然后“ * xxx地址”得到该地址处变量的值,即a *&可以抵消
|
请发表评论