結構體内存分配機制

package main

func main(){
/*
先一個思考題,我們定義一個Person結構體(包括 名字,年齡)
我們看看下面一段代碼,輸出什麽内容?
var p1 Person
p1.Age=10
p1.Name=“小明”
var p2 Person =p1

fmt.Println(p2.Age)
p2.Name = "tom"
fmt.Printf("p2.Name=%v p1.Name=%v",p2.Name,p1,Name)

//説明:
1)第3種和第4種方式返回的是結構體指針。
2)結構體指針訪問字段的標準方式應該是:(*結構體指針)字段名,比如(*person)Name="tom"
3)但go做了一個簡化,也支持結構體指針字段名,比如person.Name="tom".更加符合程序員使用的習慣。go編譯器底層對person.Name做了轉化(*person).Name.

基本説明
變量總是存在内存中的,那麽結構體變量在内存中究竟是怎樣存在的?
這裏我們給大家夥畫一個圖來説明一下結構體變量在内存中如果存在?
輸出的結果是;person

下面一段代碼,會輸出什麽信息
var p1 Person
p1.Age=10
p1.Name="小明"
var p2 *Person = &p1

fmt.Println((*p2).Age)
fmt.Println(p2.Age)
p2.Name="tom"
fmt.Printf("p2.Name=%v p1.Name=%v\n",p2.Name,p1.Name)
fmt.Printf("p2.Name=%v p1.Name=%v\n",(*p2).Name,p1.Name)

fmt.Printf("p1的地址%p\n",&p1)
fmt.Printf("P2的地址%p p2的值%p\n",&p2,p2)

看下面代碼,並分析原因
var p1 Person
p1.Age=10
p1.Name="小明"
var p2 *Person = &p1

fmt.Println(*p2.Age)//能不能這樣寫?不能這樣寫,會報錯,原因是的運行符優先級比.高。
 */

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值