【入门】Go语言指针详解()-go
【入门】Go语言指针详解()
- 一、指针介绍1.1 什么是指针?1.2 指针有什么用?
- 1.1 什么是指针?
- 1.2 指针有什么用?
- 二、指针的定义
- 三、指针操作注意事项3.1 空指针3.2 操作没有合法指向的内存3.3 new()函数使用
- 3.1 空指针
- 3.2 操作没有合法指向的内存
- 3.3 new()函数使用
一、指针介绍
1.1 什么是指针?
- 指针是一种存储变量内存地址的变量。
- Go 语言中的指针与 C/C++ 中的指针类似,但是 Go 语言中的指针不能进行指针运算,也不能进行指针类型转换。
1.2 指针有什么用?
在Go语言中,指针是一种特殊的变量,它存储了一个变量的内存地址。通过指针,我们可以直接访问和修改变量的值,而不需要拷贝变量本身,这样可以提高程序的效率。指针在Go语言中有以下几个作用:
- 传递变量的地址:指针可以作为函数参数,将变量的地址传递给函数,这样函数就可以直接修改变量的值。
- 动态分配内存:通过指针可以在运行时动态分配内存,这样程序就可以根据需要动态地创建和销毁变量。
- 访问复杂数据结构:指针可以用于访问复杂的数据结构,如链表、树等,通过指针可以方便地遍历和修改这些数据结构。
- 函数返回值:指针可以作为函数的返回值,这样函数就可以返回一个指向变量的指针,而不是变量本身,这样可以避免变量拷贝和内存分配的开销。
二、指针的定义
语法:
var 指针变量名称 *指针类型
如下案例:通过指针修改变量的值
package main
import "fmt"
func main() {
var a int = 100
var p *int = &a
// 通过指针修改变量的值
*p = 666
fmt.Printf("a变量的值:%v\ta变量的内存地址:%v", a, p)
}
代码输出内容:
a变量的值:666 a变量的内存地址:0xc000018098
三、指针操作注意事项
3.1 空指针
定义完成指针变量后,没有声明任何内存地址,那么就是空指针。
var p *int
fmt.Println(p)
3.2 操作没有合法指向的内存
没有指向内存地址,直接操作
var p *int
*p = 666 // 没有指向内存地址,直接操作
fmt.Println(p)
3.3 new()函数使用
开辟数据类型对应的内存空间,返回值为数据类型指针
var p *int
p = new(int) //int占用4字节,也就是开辟4字节的内存空间,给p指针变量
*p = 666
fmt.Println(p)
————————
- 一、指针介绍1.1 什么是指针?1.2 指针有什么用?
- 1.1 什么是指针?
- 1.2 指针有什么用?
- 二、指针的定义
- 三、指针操作注意事项3.1 空指针3.2 操作没有合法指向的内存3.3 new()函数使用
- 3.1 空指针
- 3.2 操作没有合法指向的内存
- 3.3 new()函数使用
一、指针介绍
1.1 什么是指针?
- 指针是一种存储变量内存地址的变量。
- Go 语言中的指针与 C/C++ 中的指针类似,但是 Go 语言中的指针不能进行指针运算,也不能进行指针类型转换。
1.2 指针有什么用?
在Go语言中,指针是一种特殊的变量,它存储了一个变量的内存地址。通过指针,我们可以直接访问和修改变量的值,而不需要拷贝变量本身,这样可以提高程序的效率。指针在Go语言中有以下几个作用:
- 传递变量的地址:指针可以作为函数参数,将变量的地址传递给函数,这样函数就可以直接修改变量的值。
- 动态分配内存:通过指针可以在运行时动态分配内存,这样程序就可以根据需要动态地创建和销毁变量。
- 访问复杂数据结构:指针可以用于访问复杂的数据结构,如链表、树等,通过指针可以方便地遍历和修改这些数据结构。
- 函数返回值:指针可以作为函数的返回值,这样函数就可以返回一个指向变量的指针,而不是变量本身,这样可以避免变量拷贝和内存分配的开销。
二、指针的定义
语法:
var 指针变量名称 *指针类型
如下案例:通过指针修改变量的值
package main
import "fmt"
func main() {
var a int = 100
var p *int = &a
// 通过指针修改变量的值
*p = 666
fmt.Printf("a变量的值:%v\ta变量的内存地址:%v", a, p)
}
代码输出内容:
a变量的值:666 a变量的内存地址:0xc000018098
三、指针操作注意事项
3.1 空指针
定义完成指针变量后,没有声明任何内存地址,那么就是空指针。
var p *int
fmt.Println(p)
3.2 操作没有合法指向的内存
没有指向内存地址,直接操作
var p *int
*p = 666 // 没有指向内存地址,直接操作
fmt.Println(p)
3.3 new()函数使用
开辟数据类型对应的内存空间,返回值为数据类型指针
var p *int
p = new(int) //int占用4字节,也就是开辟4字节的内存空间,给p指针变量
*p = 666
fmt.Println(p)