Warning: mysqli_query(): (HY000/1021): Disk full (/tmp/#sql_51b_2.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") in /opt/lampp/htdocs/wordpress/wp-includes/wp-db.php on line 2033
【入门】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)