package main
import "fmt"
func main() {
var a int = 1
var b *int = &a
var c **int = &b
var x int = *b
fmt.Println("a = ",a)
fmt.Println("&a = ",&a)
fmt.Println("*&a = ",*&a)
fmt.Println("b = ",b)
fmt.Println("&b = ",&b)
fmt.Println("*&b = ",*&b)
fmt.Println("*b = ",*b)
fmt.Println("c = ",c)
fmt.Println("*c = ",*c)
fmt.Println("&c = ",&c)
fmt.Println("*&c = ",*&c)
fmt.Println("**c = ",**c)
fmt.Println("***&*&*&*&c = ",***&*&*&*&*&c)
fmt.Println("x = ",x)
}
解释
理论
&
符号的意思是对变量取地址,如:变量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是一样的 (从这里也不难看出,
c和
b也是一样的)
&a
又因为上面得到的和
b是一样的
**c
所以和
&a是一样的,再次把*&约去后
**c和
a`是一样的,都是1
不信你试试?
公布结果
运行的结果内的地址值(0xc200开头的)可能会因不同机器运行而不同,你懂的
$ go run main.go
a = 1
&a = 0xc200000018
*&a = 1
b = 0xc200000018
&b = 0xc200000020
*&b = 0xc200000018
*b = 1
c = 0xc200000020
*c = 0xc200000018
&c = 0xc200000028
*&c = 0xc200000020
**c = 1
***&*&*&*&c = 1
x = 1
两个符号抵消顺序
*&
可以在任何时间抵消掉,但&*
不可以被抵消的,因为顺序不对
fmt.Println("*&a\t=\t",*&a) //成功抵消掉,打印出1,即a的值
fmt.Println("&*a\t=\t",&*a) //无法抵消,会报错
随机推荐
-
c#对话框
OpenFileDialog open = new OpenFileDialog();//创建对话框 open.InitialDirectory = @"C:\Documents and S ...
-
C#string常用函数总结
补充: 1:在C语言里 char占1个字节 而在C#,Java里char占两个字节 数据库里char 中汉占两个字节 字母数字占一个字 2:string ...
-
Linux平台下线程池的原理及实现
转自:http://blog.****.net/lmh12506/article/details/7753952 前段时间在github上开了个库,准备实现自己的线程池的,因为换工作的事,一直也没有实 ...
-
linux文件描述符--转载
转自:http://blog.****.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录 ...
-
Android JUnit Test——批量运行测试代码
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...
-
ceil floor函数
> a=6.4> b=math.ceil(a)> print(b)7> c=math.floor(a)> print(c)6 ceil向上取整 floor向下取整
-
ContentProvider官方教程(10)<provider>元素及属性介绍
The <provider> Element Like Activity and Service components, a subclass of ContentProvider mus ...
-
Python3基础 type获取变量的类型
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
-
定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。
package b; public interface ZuoBiao { double zuobiao(); } package b; public class Point implements Z ...
-
acdream1197 Points In Cuboid
题目链接:http://acdream.info/problem?pid=1197 题意:给出一些点.每次给出一个长方体,问在长方体中的点的个数. 思路:kd-tree. const int N=11 ...