技术文摘
Go指针函数:modifyPointer能修改原始值而modifyReference不能的原因
2025-01-09 01:53:33 小编
Go指针函数:modifyPointer能修改原始值而modifyReference不能的原因
在Go语言中,指针是一种强大的工具,它允许我们直接操作内存地址。在使用指针函数时,有时会遇到modifyPointer函数能修改原始值,而modifyReference函数却不能的情况,这背后有着特定的原因。
我们来看看modifyPointer函数。当我们使用指针作为函数参数时,实际上是将变量的内存地址传递给了函数。在modifyPointer函数中,通过解引用指针,我们可以直接访问和修改该内存地址上存储的值。这就意味着对指针所指向的值进行的任何修改都会反映在原始变量上,因为它们指向的是同一块内存空间。
例如:
func modifyPointer(ptr *int) {
*ptr = 10
}
func main() {
num := 5
modifyPointer(&num)
fmt.Println(num)
}
在上述代码中,modifyPointer函数接收一个指向int类型的指针,通过解引用修改了指针指向的值,最终num的值被修改为10。
然而,对于modifyReference函数,在Go语言中,函数参数传递是值传递。当我们传递一个变量给函数时,实际上是将该变量的副本传递给了函数。在函数内部对副本的修改不会影响到原始变量。
例如:
func modifyReference(num int) {
num = 10
}
func main() {
num := 5
modifyReference(num)
fmt.Println(num)
}
这里,modifyReference函数接收一个int类型的参数,在函数内部对num的修改只是修改了副本,原始的num值仍然是5。
modifyPointer能修改原始值是因为它通过指针直接操作了原始变量的内存地址,而modifyReference不能修改原始值是因为Go语言的函数参数传递是值传递,函数内部操作的是变量的副本。理解这一差异对于正确使用指针和函数在Go语言中进行编程至关重要。
- 深入了解基于 Next.js 的 SSR/SSG 方案
- Go 工程化:优雅编写 Repo 层代码之道
- 微软专利披露 WMR 系列 VR 头显的 MR 透视效果图像对齐方法及系统
- Go 中值为 Nil 能否调用函数?
- Hashtable 用于检验随机数随机性
- JavaScript 数据分组的优雅实现方式
- 实战:Spring Boot 整合阿里开源中间件 Canal 达成数据增量同步
- 超实用的 Python 库,每次推荐都爆火!
- atomic 包在减少锁冲突中的运用之道
- OpenHarmony SA 动态库服务的 main 入口拉起
- Netty 基础:Java NIO 核心要点
- WebAssembly 用于前端 API 请求的签名
- Swift 扩展入驻 VS Code ,开发者无需依赖 Xcode
- LLVM Clang 对 SPIR-V 工具链的初步支持
- 美国若使坏,中国互联网人能否使用开源软件