go語言中找&和*區別


 

*和&的區別 :

  1. & 是取地址符號 , 即取得某個變量的地址 , 如 ; &a
  2. *是指針運算符 , 可以表示一個變量是指針類型 , 也可以表示一個指針變量所指向的存儲單元 , 也就是這個地址所存儲的值

不帶指針的邊數組值

package main

import "fmt"

type Bid struct {
    Id string
    Name string
}

func main() {
    var bid1 = Bid{
        Id:"123",
        Name:"aaa",
    }
    var bid2 = Bid{
        Id:"111",
        Name:"eeee",
    }
    //var bb []Bid
    var bb = []Bid{}
    bb = append(bb, bid1)
    bb = append(bb,bid2)
    for _,v := range bb{
        v.Name  = "www"
    }
    fmt.Println(bb)
}

 

帶指針的邊數組值

package main

import "fmt"

type Bid struct {
    Id string
    Name string
}

func main() {

    var bb []*Bid
    bb = append(bb , &Bid{Id:"12",Name:"222"})
    bb = append(bb, &Bid{Id:"111",Name:"444"})

    for _,v := range bb{
        v.Id = "111"
    }

    fmt.Println(*bb[0])

}

&是取地址符號, 取到Person類型對象的地址

*可以表示一個變量是指針類型(r是一個指針變量):

3.*也可以表示指針類型變量所指向的存儲單元 ,也就是這個地址所指向的值

4.查看這個指針變量的地址 , 基本數據類型直接打印地址

摘自其他博客 :
經常會見到: p . *p , &p 三個符號
p是一個指針變量的名字,表示此指針變量指向的內存地址,如果使用%p來輸出的話,它將是一個16進制數。而*p表示此指針指向的內存地址中存放的內容,一般是一個和指針類型一致的變量或者常量。
而我們知道,&是取地址運算符,&p就是取指針p的地址。等會,怎么又來了個地址,它到底和p有什么區別?區別在於,指針p同時也是個變量,既然是變量,編譯器肯定要為其分配內存地址,就像程序中定義了一個int型的變量i,編譯器要為其分配一塊內存空間一樣。而&p就表示編譯器為變量p分配的內存地址,而因為p是一個指針變量,這種特殊的身份注定了它要指向另外一個內存地址,程序員按照程序的需要讓它指向一個內存地址,這個它指向的內存地址就用p表示。而且,p指向的地址中的內容就用*p表示。
————————————————
版權聲明:本文為CSDN博主「liudashuang2017」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/liudashuang2017/article/details/79950267


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM