Go 如何查看一个变量的内存地址 理解指针问题

Python010

Go 如何查看一个变量的内存地址 理解指针问题,第1张

熟悉C语言的同学都知道,查看一个变量的地址在处理指针的相关问题的时候直观重要,在C中直接取地址符&即可。那么在Go语言中如何查看一个变量的地址,我们使用unsafe.Pointer() 函数来查看一个变量的内存地址。

举例:

type Vertex struct {

X, Y float64

}

func (v Vertex) sqrt() float64 {

return math.Sqrt(v.X * v.X + v.Y * v.Y)

}

func (v Vertex) scale(f float64) { //带 号 和不带*号的区别 可以从内存地址来看出

fmt.printf("=======", unsafe.Pointer(v))//v 本身就是指针 存储的就是地址 不用取地址

v.X = x.X * f

v.Y = v.Y * f

}

func main() {

v := Vertex{3, 4}

fmt.printf("=======", unsafe.Pointer(&v))

v.scale(10)

fmt.Println(v.sqrt())

}

//带 号 打印的结果 ====== -%!(EXTRA unsafe.Pointer=0xc00006e070)======%!(EXTRA unsafe.Pointer=0xc00006e070) 相同

//不带 号 打印的结果 ======%!(EXTRA unsafe.Pointer=0xc000094060)======%!(EXTRA unsafe.Pointer=0xc000094090) 不同

去掉*号 在scale()方法中要对 v 进行取地址操作

sqrt函数用于计算一个非负实数的平方根。sqrt的函数原型: 在VC6.0中的math.h头文件的函数原型为double sqrt(double)

说明:sqrt即Square Root Calculations(平方根计算),通过这种运算可以考验CPU的浮点能力。

sqrt()函数的语法:

Parameter(s): x – a number whose square root to be calculated.

参数: x –要计算其平方根的数字。

Return value: double – it returns double value that is the square root of the given number x.

返回值: double-返回double值,它是给定数字x的平方根。

Example:

C语言中sqrt函数的使用方法:

C语言中sqrt函数是指的开方运算函数,得到的结果是函数变量(可以是数值,也可以是变量名)的算术平方根。在VC6.0中的math.h头文件的函数原型为doublesqrt(double)。

说明:sqrt系SquareRootCalculations(平方根计算),通过这种运算可以考验CPU的浮点能力。

程序例:

#include

#include

intmain(void)

{

doublex=4.0,result

result=sqrt(x)//result*result=x

printf(“Thesquarerootof%fis%f\n”,x,result)

return0

}

VC2008后为重载函数,原型为floatsqrt(float),doublesqrt(double),doublelongsqrt(doublelong)

注意没有sqrt(int),但是返回值可以为int。

注意事项:

1.sqrt函数运行的结果是算术平方根,即不能运算出负数值,也不能输出虚数结果。如需要得到算术平方根中的负数值,则应该在sqrt函数前添加负号。

2.sqrt函数的参数必须是非负数值,如果是负数值,则输出会报错,即数值无效如果参数是未定义的非数字变量,则按回车后也会报错,即变量名有误。

3.sqrt函数的计算精度与C语言设置的精度有关,可以通过设置更改精度。