1. package main
  2. import "fmt"
  3. func main() {
  4. var a int = 1
  5. var b *int = &a
  6. var c **int = &b
  7. var x int = *b
  8. fmt.Println("a = ",a)
  9. fmt.Println("&a = ",&a)
  10. fmt.Println("*&a = ",*&a)
  11. fmt.Println("b = ",b)
  12. fmt.Println("&b = ",&b)
  13. fmt.Println("*&b = ",*&b)
  14. fmt.Println("*b = ",*b)
  15. fmt.Println("c = ",c)
  16. fmt.Println("*c = ",*c)
  17. fmt.Println("&c = ",&c)
  18. fmt.Println("*&c = ",*&c)
  19. fmt.Println("**c = ",**c)
  20. fmt.Println("***&*&*&*&c = ",***&*&*&*&*&c)
  21. fmt.Println("x = ",x)
  22. }

解释

理论

&符号的意思是对变量取地址,如:变量a的地址是&a
*符号的意思是对指针取值,如:*&a,就是a变量所在地址的值,当然也就是a的值了

简单的解释

*& 可以互相抵消,同时注意,*&可以抵消掉,但&*是不可以抵消的
a*&a是一样的,都是a的值,值为1 (因为*&互相抵消掉了)
同理,a*&*&*&*&a是一样的,都是1 (因为4个*&互相抵消掉了)

展开

因为有
var b *int = &a
所以
a*&a*b是一样的,都是a的值,值为1 (把b当做&a看)

再次展开

因为有
var c **int = &b
所以
**c**&b是一样的,把&约去后
会发现**c和`
b是一样的 (从这里也不难看出,cb也是一样的)
又因为上面得到的
&ab是一样的
所以
**c
&a是一样的,再次把*&约去后**ca`是一样的,都是1

不信你试试?

公布结果

运行的结果内的地址值(0xc200开头的)可能会因不同机器运行而不同,你懂的

  1. $ go run main.go
  2. a = 1
  3. &a = 0xc200000018
  4. *&a = 1
  5. b = 0xc200000018
  6. &b = 0xc200000020
  7. *&b = 0xc200000018
  8. *b = 1
  9. c = 0xc200000020
  10. *c = 0xc200000018
  11. &c = 0xc200000028
  12. *&c = 0xc200000020
  13. **c = 1
  14. ***&*&*&*&c = 1
  15. x = 1

两个符号抵消顺序

*&可以在任何时间抵消掉,但&*不可以被抵消的,因为顺序不对

  1. fmt.Println("*&a\t=\t",*&a) //成功抵消掉,打印出1,即a的值
  2. fmt.Println("&*a\t=\t",&*a) //无法抵消,会报错

随机推荐

  1. java中几种常见字符集与乱码介绍

    1.  ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码 .读者在输入和存储文档时都要使用内码,内码分为  单字节内码 -- Single-Byte chara ...

  2. Javascript中自动切换焦点

      <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&g ...

  3. asp.net 关闭子窗体 刷新主窗体

    主窗体************************************************************************************ //原窗口保留,以对话框 ...

  4. 迷之节约 分类: sdutOJ 最小生成树 2015-06-24 19:10 10人阅读 评论(0) 收藏

    迷之节约 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 FF超级有钱,最近又买了n个(1 <= n <= 300)小岛,为 ...

  5. HDU(4734),数位DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4734 F(x) Time Limit: 1000/500 MS (Java/Others) ...

  6. linux select 学习

    一.select介绍 函数原型: #include <sys/select.h> int select(int maxfdp1, fd_set *restrict readfds, fd_ ...

  7. sass的安装与基础

    安装教程:http://www.haorooms.com/post/sass_css 手册:http://sass.bootcss.com/docs/guide/     http://www.w3c ...

  8. Mysql-学习笔记(==》建表修改一)

    -- 建立表CREATE TABLE 表名( )ENGINE=存储引擎(MYISAM INNODB) AUTO_INCREMENT=100 DEFAULT CHARSET=utf8; CREATE T ...

  9. Jams倒酒(pour)

    1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为a ml 和 b ml的酒杯来装载. 酒吧的生意并不好.Jams发现酒鬼们都很 ...

  10. 数据库SQL语句练习题10--18

    10.查询Score表中的最高分的学生学号和课程号.(子查询或者排序) select t.sno,t.cno from SCORE t where degree = (select max(degre ...