*和&的區別 :
- & 是取地址符號 , 即取得某個變量的地址 , 如 ; &a
- *是指針運算符 , 可以表示一個變量是指針類型 , 也可以表示一個指針變量所指向的存儲單元 , 也就是這個地址所存儲的值
不帶指針的邊數組值
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