【Golang】✔️走进 Go 语言✔️ 第十一课 指针

举报
我是小白呀iamarookie 发表于 2021/09/09 23:35:29 2021/09/09
【摘要】 【Golang】✔️走进 Go 语言✔️ 第十一课 指针 概述指针数据和数据存储地址创建指针通过指针修改变量值空指针 指针数组二级指针 概述 Golang 是一个跨平台的新生编程语言....

概述

Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 11 课)

在这里插入图片描述

指针

指针 (Pointer) 也就是内存地址, 指针变量是用来存放内存地址的变量. Go 语言的取地址符是&, 放到一个变量前使用就会返回相应变量的内存地址.

在这里插入图片描述

数据和数据存储地址

例子:

package main

import "fmt"

func main() {

	// 定义变量
	var num = 10

	// 调试输出值和地址
	fmt.Println("值: ", num, "地址: ", &num)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出结果:

值:  10 地址:  0xc00000a088

  
 
  • 1

创建指针

例子:

package main

import "fmt"

func main() {

	// 定义变量
	var num = 10

	// 定义指针
	var pnum = &num

	// 调试输出
	fmt.Println("变量值: ", num, "变量地址: ", &num)
	fmt.Println("指针值: ", pnum, "指针地址: ", &pnum)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

输出结果:

变量值:  10 变量地址:  0xc00000a088
指针值:  0xc00000a088 指针地址:  0xc000006028

  
 
  • 1
  • 2

我们可以看到, 指向 num 的指针 pnum 的值为 num 的地址.

通过指针修改变量值

例子:

package main

import "fmt"

func main() {

	// 定义变量
	var num = 10

	// 定义指针
	var pnum = &num
	fmt.Println(num, &num)

	// 通过指针改变变量的值
	*pnum = 100
	fmt.Println(num, &num)
	
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

输出结果:

10 0xc00000a088
100 0xc00000a088

  
 
  • 1
  • 2

空指针

空指针 (Null Pointer) 是在计算中有保留值, 用于指示指针不引用有效对象. 程序通常使用空指针来表示条件.

在这里插入图片描述
例子:

package main

import "fmt"

func main() {

	// 定义空指针
	var pt *int

	// 调试输出
	fmt.Println(pt)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出结果:

<nil>

  
 
  • 1

指针数组

例子:

package main

import "fmt"

func main() {

	// 定义int数组
	var array = []int {1, 2, 3}

	// 定义指针数组
	var pt_array [3]* int

	// 遍历
	for i := 0; i < 3; i++ {
		// 指针指向地址
		pt_array[i] = &array[i]
	}

	// 输出指针和指针指向的值
	for _, pt := range pt_array {
		fmt.Println(*pt, pt)
	}

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

输出结果:

1 0xc0000ae090
2 0xc0000ae098
3 0xc0000ae0a0

  
 
  • 1
  • 2
  • 3

二级指针

二级指针是一个指向一级指针值的指针.

在这里插入图片描述

例子:

package main

import "fmt"

func main() {

	// 定义变量
	var num = 10

	// 定义一级指针
	var pt *int = &num
	
	// 定义二级指针
	var ppt **int = &pt

	// 调试输出
	fmt.Println(num, &num)
	fmt.Println(pt, &pt)
	fmt.Println(ppt, &ppt)

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

输出结果:

10 0xc00000a088
0xc00000a088 0xc000006028
0xc000006028 0xc000006030

  
 
  • 1
  • 2
  • 3

我们可以看到一级指针 pt 的值为 num 的内存地址, 二级指针 ppt 的值为一级指针 pt 的地址.

在这里插入图片描述

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/119601449

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。