数据类型:指针
什么是指针
当定义一个变量 name,name只是编程语言中方便程序员编写和理解代码的一个标签。
当我们访问这个标签[name]时,机算机会返回它指向的内存地址里存储的值:Hello world
。
出于某些需要,我们会将这个内存地址赋值给另一个变量名,通常叫做 ptr(pointer的简写),而这个变量,我们称之为指针变量。
换句话说,指针变量指向了值的内存地址
根据变量指向的值,是否是内存地址,变量分为两种:
普通变量:存数据值本身
指针变量:存值的内存地址
指针的创建
第一种方法
先定义对应的变量,再通过变量取得内存地址,创建指针
第二种方法
先创建指针,分配好内存后,再给指针指向的内存地址写入对应的值。
第三种方法
先声明一个指针变量,再从其他变量取得内存地址赋值给它
上面的三段代码中,指针的操作都离不开这两个符号:
&
:从一个普通变量中取得内存地址*
:当*
在赋值操作值的右边,是从一个指针变量中取得变量值,当*
在赋值操作值的左边,是指该指针指向的变量
通过下面这段代码,你可以熟悉这两个符号的用法
输出如下
要想打印指针指向的内存地址,方法有两种
指针的零值
当指针声明后,没有进行初始化,其零值是 nil。
输出如下
指针与切片
切片与指针一样,都是引用类型
如果我们想通过一个函数改变一个数组的值,有两种方法
将这个数组的切片做为参数传给函数
将这个数组的指针做为参数传给函数
尽管二者都可以实现我们的目的,但是按照 Go 语言的使用习惯,建议使用第一种方法,因为第一种方法,写出来的代码会更加简洁,易读。
具体可以参考下面两种方法的代码实现
使用切片
使用指针
Last updated
Was this helpful?