GO 指针与地址

108 阅读1分钟

前言

在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 🌁