前言
在Golang编程语言中,指针和地址是非常重要的概念,它们允许程序直接访问内存地址和数据。
概念
指针是一个变量,它存储了一个值的内存地址。在Golang中,使用*操作符声明指针类型,使用&操作符获取变量的地址。
&地址运算符用于获取变量的内存地址。*解引用运算符用于访问指针指向的值。
基础示例
package main
import "fmt"
type User struct {
Name string
Age int
}
func main() {
var x int = 1
var num *int = &x
var user *User = &User{"zs", 18}、
// 输出地址
fmt.Println(num, user, &x) /* 0xc0000a6080 &{zs 18} 0xc0000a6080*/
// 取值
fmt.Println(*num, *user, *&user.Age) /* 1 {zs 18} 18*/
}
修改示例
在Go语言中,指针是一种特殊类型的变量,它存储了其他变量的内存地址。指针变量通常用于引用其他变量,以便可以在程序中间接地访问和修改它们的值。
package main
import "fmt"
type User struct {
Name string
Age int
}
func main() {
// 指针声明和普通声明的区别
// 类型对应的是值
{
var num int = 1
var user User = User{"zs", 18}
// 修改操作
Change1(num, user)
fmt.Println(num, user.Age) /* 1 18 */
}
// 类型的指针对应的是值的地址
{
var x int = 1
var num *int = &x
var user *User = &User{"zs", 18}
// 修改操作
Change2(num, user)
fmt.Println(*num, *&user.Age) /* 18 19 */
}
}
func Change1(num int, user User) {
num = user.Age
user.Age = 19
}
func Change2(num *int, user *User) {
*num = user.Age
// *&user.Age = 19
user.Age = 19 // 结构体直接设置也可以
}
- 通过地址修改不回受函数作用域的影响
总结
- 指针在Golang中有许多应用场景,包括数据结构、内存管理和函数传递等。
2024/3/6 🌁