
Go语言指针详解及示例
在Go语言中,*号在类型声明中表示指针类型。它与作为取值操作符的*有所不同,在类型声明中,*表示声明的变量是一个指针,指向某个特定数据类型的内存地址。
让我们通过一个例子来理解:
package main
import "fmt"
type Employee struct {
Id string
Name string
Age int
}
func main() {
// 直接创建 Employee 类型的变量
e := Employee{"0", "P1", 33}
fmt.Printf("e: %T\n", e) // 输出: e: main.Employee
// 使用 new() 函数创建 Employee 指针类型的变量
eNewed := new(Employee) // new() 返回的是一个指针
eNewed.Id = "1"
fmt.Printf("eNewed: %T\n", eNewed) // 输出: eNewed: *main.Employee
// *int 表示指向 int 类型变量的指针
var intPtr *int
var i int = 10
intPtr = &i // & 获取变量的内存地址
fmt.Printf("intPtr: %T, *intPtr: %v\n", intPtr, *intPtr) // 输出: intPtr: *int, *intPtr: 10
//*[]int 表示指向 []int (整型切片) 的指针
var slicePtr *[]int
var intSlice []int = []int{1,2,3}
slicePtr = &intSlice
fmt.Printf("slicePtr: %T, *slicePtr: %v\n", slicePtr, *slicePtr) // 输出: slicePtr: *[]int, *slicePtr: [1 2 3]
}在这个例子中:
立即学习“go语言免费学习笔记(深入)”;
e 是一个 Employee 类型的变量,它直接存储了 Employee 结构体的数据。eNewed 是一个 *Employee 类型的变量,它是一个指针,存储的是 Employee 结构体数据的内存地址。 new(Employee) 分配了一块内存用于存储 Employee 结构体,并返回指向这块内存的指针。*int 定义了一个指向整数的指针。&i 获取整数变量 i 的内存地址,并将其赋值给 intPtr。 *intPtr 则访问 intPtr 指向的内存地址中的值。*[]int 定义了一个指向整型切片的指针,类似的,*slicePtr 访问 slicePtr 指向的内存地址中的切片数据。因此,* 在类型声明中表示指针类型,它不是取值操作符,而是类型定义的一部分,指示该变量存储的是内存地址而不是实际数据。 通过指针,我们可以间接操作内存中的数据,实现高效的内存管理和数据共享。
以上就是Go语言中*号在类型声明中代表什么含义?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号