Go指针类型的参数传递机制
作者:EasyWind
时间:2024-05-13
来源:互联网
浏览:0
Go指针类型参数传递有两种方式:值传递:函数获得指针副本,对副本的更改不影响原始指针。引用传递:函数获得对原始指针的引用,对引用的更改影响原始指针。
Go 指针类型参数传递有两种方式:值传递:函数获得指针副本,对副本的更改不影响原始指针。引用传递:函数获得对原始指针的引用,对引用的更改影响原始指针。

Go 指针类型参数传递机制
在 Go 中,指针类型参数以两种不同的方式传递给函数:值传递和引用传递。
值传递
如果将指针值作为值传递给函数,则函数将获得该指针的副本。对该副本所做的任何更改都不会影响原始指针。
代码示例:
package main
import "fmt"
func changeValue(ptr *int) {
*ptr = 10
}
func main() {
ptr := new(int)
*ptr = 5
fmt.Println(*ptr) // 输出: 5
changeValue(ptr)
fmt.Println(*ptr) // 输出: 5
}引用传递
如果将指针地址作为值传递给函数,则函数将获得对原始指针的引用。对该引用所做的任何更改都会影响原始指针。
代码示例:
package main
import "fmt"
func changePointer(ptr **int) {
*ptr = new(int)
**ptr = 10
}
func main() {
ptr := new(int)
*ptr = 5
fmt.Println(*ptr) // 输出: 5
changePointer(&ptr)
fmt.Println(*ptr) // 输出: 10
}实战案例
在以下实战案例中,我们使用值传递和引用传递来实现一个简单的链表。
使用值传递实现链表:
type Node struct {
value int
next *Node
}
func createList(values []int) *Node {
head := &Node{value: values[0]}
current := head
for _, v := range values[1:] {
next := &Node{value: v}
current.next = next
current = next
}
return head
}
func printList(head *Node) {
for current := head; current != nil; current = current.next {
fmt.Printf("%d ", current.value)
}
fmt.Println()
}
func main() {
values := []int{1, 2, 3, 4, 5}
head := createList(values)
printList(head) // 输出: 1 2 3 4 5
}使用引用传递实现链表:
type Node struct {
value int
next **Node
}
func createList(values []int) *Node {
head := &Node{value: values[0]}
current := head
for _, v := range values[1:] {
next := &Node{value: v}
*current.next = next
current = next
}
return head
}
func printList(head *Node) {
for current := head; current != nil; current = *current.next {
fmt.Printf("%d ", current.value)
}
fmt.Println()
}
func main() {
values := []int{1, 2, 3, 4, 5}
head := createList(values)
printList(head) // 输出: 1 2 3 4 5
}在第一个示例中,我们使用值传递创建链表。在第二个示例中,我们使用引用传递创建链表。执行结果都是相同的,但使用引用传递时,我们可以在函数中修改链表的顺序。
作者最新文章
淘宝闪购“等灯不计时”机制解析:政策、技术与多方协同
2026-09-08 18:00
一加自研电竞三芯P4/G3/T3确认:一加16首发,支持185FPS及9000mAh电池
2026-09-08 16:52
抖音拍摄剪辑教程:从竖屏运镜到卡点成片
2026-09-03 06:05
Excel筛选大于指定数值:操作步骤与结果验证
2026-09-03 06:03
PDF添加文字水印:位置、透明度与字号设置指南
2026-09-03 06:01
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















