当我:=&b

时间:2019-05-13 08:07:27

标签: pointers go

我正在学习编程,我尝试使用'&'来获取内存地址。但是我很想知道'&i'的含义是什么,而'i'来自i:=&b,b是一个整数。

b := 7
i := &b
fmt.Println(&b) //print => 0xc000088000
fmt.Println(i) //print => 0xc000088000
fmt.Println(&i) //print => 0xc00000e018

在这种情况下,“&i”是什么意思?

3 个答案:

答案 0 :(得分:4)

&address operator,对其求值将得出一个内存地址,该地址在传递给fmt包时,通常以十六进制格式打印(“ base 16表示法” ,前导0x“)。

一个内存地址就是:一个内存地址。不管是int变量还是string的地址,还是指针类型的变量。在打印时,它们看起来都一样。

地址运算符:

  

对于类型为x的操作数T,地址操作&x生成类型为*Tx的指针。

因此,地址运算符为您提供了一个指针值,当您取消引用时,该指针值将返回原始值。

&b将是类型b的变量*int的地址,当您取消引用时,该地址:*b将为您提供{{1 }}。

b将是类型&i的变量i的地址,当您取消引用时:**int将为您提供*i的值这是i的地址。因此,如果您还取消引用:b,那也将为您提供**(&i)的值。

答案 1 :(得分:1)

此处&b返回地址b,并且相同的地址存储在i中。由于i也是变量&i将返回变量i的地址。

答案 2 :(得分:1)

因此from scipy import optimize L1 = 0.1; res1 = optimize.fmin_cg(cost, x0=theta, fprime=cost, args = (X_train,y_train,L1)) print ('res1 = '), res1运算符生成一个指向其操作数的指针。因此,&基本上会生成指向&i的指针,该指针已经是指向i的指针,而该指针不过是一个存储器地址。因此,当您执行b时,它会打印fmt.Println(&i)的内存地址。