goland 记"*"与"&"的使用

首先引用一段Go语音中文网的代码:

package main

import "fmt"

func main() {
	var a int = 1  // int类型的值
	var b *int = &a  // *int类型的指针,理解指向一个类型为int的值的地址的指针类型
	var c **int = &b  // 指向*int的**int类型的指针
	var x int = *b  // int类型的值
	fmt.Println("a = ",a)
	fmt.Println("&a = ",&a) // 取a变量的内存地址
	fmt.Println("*&a = ",*&a) // 对a变量的内存地址取值
	fmt.Println("b = ",b)  // *int类型的指针,a变量的内存地址
	fmt.Println("&b = ",&b) // **int类型的指针,指向*int(a变量的内存地址)
	fmt.Println("*&b = ",*&b) // 对**int取值,值为*int(a变量的内存地址)
	fmt.Println("*b = ",*b) // 对*int取值,值为int(a的值)
	fmt.Println("c = ",c)  // **int类型的指针,指向*int(a变量的内存地址)
	fmt.Println("*c = ",*c) // 对**int取值,值为*int(a变量的内存地址)
	fmt.Println("&c = ",&c) // 取**int的内存地址
	fmt.Println("*&c = ",*&c) // 对**int的内存地址取值
	fmt.Println("**c = ",**c) // 对**int指向的内存地址的指针指向的值(a变量的内存地址)取值
	fmt.Println("***&*&*&*&c = ",***&*&*&*&*&c)
	fmt.Println("x = ",x) // 对*int指针指向的地址取值
}

//a =  1
//&a =  0xc42001a0d0
//*&a =  1
//b =  0xc42001a0d0
//&b =  0xc42000c028
//*&b =  0xc42001a0d0
//*b =  1
//c =  0xc42000c028
//*c =  0xc42001a0d0
//&c =  0xc42000c030
//*&c =  0xc42000c028
//**c =  1
//***&*&*&*&c =  1
//x =  1

  

指针变量前加"*"是对指针指向的地址取值,变量前加"&"是返回值的地址。

  

原文地址:https://www.cnblogs.com/sxzwj/p/8882673.html