go语言中struct变量和struct指针的区别
本文最后更新于 553 天前,其中的信息可能已经有所发展或是发生改变。

在学习结构体指针的时候有些疑问, 首先定义一个结构体, 初始化结构体和它的结构体指针:

cat1 := Cat{"samy", 89.0}  
catPointer := &cat1  
  
catPointer.weight = 222  
fmt.Printf("%T \\n", cat1)  
fmt.Printf("%T \\n", catPointer)  
  
fmt.Println(cat1.weight)  
cat1.weight = 111  
fmt.Println(cat1.weight)

此时输出:

main.Cat 
*main.Cat 
222
111

此时变量cat1catPointer类型是不同的, 这个我明白. 但是它们的区别是什么呢? 现在它们都可以对结构体的内容做出修改.

感谢两位的回答, 但是我要的答案并不是那两个.
在上述例子中, 我想知道cat1catPointer的区别, 为何他们类型不同, 却表现相同.
在go官方教程中有这样一段话:

To access the fieldXof a struct when we have the struct pointerpwe could write(*p).X. However, that notation is cumbersome, so the language permits us instead to write justp.X, without the explicit dereference.

原文链接: https://tour.golang.org/moretypes/4

也就是说, 在go语言操作结构体时候, 用上述例子来说, 就是cat1catPointer类型是不同的, 但是在使用他们访问结构体的内存时, 会把catPointer当作(*catPointer)来操作, 那么这两个不同类型的变量就会出现表现相同, 类型不同的情况了.
下面用程序验证,下图可以看出他们两个类型确实不同:


手动加上*之后,再次进行操作:


答案就很明显了.

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇