go语言中的&和*

Go 语言的 取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址

Go语言的 指针变量是 *,放在一个变量前使用就代表地址值

func main() {
    
    
   var a int = 4
   var ptr *int
   ptr = &a
   println("a的值为", a);    // 4
   println("*ptr为", *ptr);  // 4
   println("ptr为", ptr);    // 824633794744
}
// eg:如上定义了一个ptr的指针变量,在输入*ptr时,代表输去它的地址值,而ptr输出的是他的内存地址(因为指针就是指向变量的内存地址
  • &符号的意思是对变量取地址
  • *符号的意思是对指针取值

示例:

type StructA struct {
    
    
	ID int
}

func main () {
    
    

	sliceA := []StructA{
    
    {
    
    1}, {
    
    2}, {
    
    3}, {
    
    4}}

	for _, a := range sliceA {
    
    
		a.ID += 1
		fmt.Println("a:", a)
	}
	
	fmt.Println("sliceA:", sliceA)
	
	for _, a := range sliceA {
    
    
		fmt.Printf("%d,", a.ID)
	}
}

// 输出结果:
a: {
    
    2}
a: {
    
    3}
a: {
    
    4}
a: {
    
    5}
sliceA: [{
    
    1} {
    
    2} {
    
    3} {
    
    4}]
1,2,3,4,

---------------------------------------------------------------------

func main () {
    
    

	sliceB := []*StructA{
    
    }

	for _, a := range sliceA {
    
    
		fmt.Println("a:", &a)
		sliceB = append(sliceB, &a)
	}
	
	fmt.Println("sliceB:", sliceB)
	
	for _, b := range sliceB {
    
    
		fmt.Printf("%d,", b.ID)
	}
}

// 输出结果:
a: &{
    
    1}
a: &{
    
    2}
a: &{
    
    3}
a: &{
    
    4}
sliceB: [0xc0000a46d0 0xc0000a46d0 0xc0000a46d0 0xc0000a46d0]
4,4,4,4,

猜你喜欢

转载自blog.csdn.net/Bel_Ami_n/article/details/125599908