06-指针(pointer)
说明:指针变量指向了一个值的内存地址
1. 声明指针
仅声明的指针是空指针
- 语法
var PointerName *type
- 语法示例
var intPointer *int
var floatPoiner *float32
var stringPointer *string
- 完整示例
package main
import "fmt"
func main() {
var stringPointer *string
fmt.Println("指针值:",stringPointer)
}
结果:
指针值: <nil>
注意:指针为空的时候,打印指针指向的值,程序会崩溃
2. 初始化指针
初始化之后,指针不在为空,其指向值为默认值(比如:string为空,int为0)
- 语法
pointerName := new(type)
- 语法示例
stringPointer := new(string)
- 完整示例
package main
import (
"fmt"
"reflect"
)
func main() {
stringPointer := new(string)
fmt.Printf("stringPointer类型为:%s\n",reflect.TypeOf(stringPointer))
if stringPointer == nil{
fmt.Println("指针为空")
}else {
fmt.Println("指针值:",stringPointer)
}
}
结果
stringPointer类型为:*string
指针值: 0xc000040250
0xc000040250
为一个存储字串值的内存地址
3. 指针赋值
- 语法
PointerName := &VariableName
说明:
- 指针的值是一个内存地址,指针指向值是这个内存地址存储的数据。
- 指针指向的值为:
*PointerName
- 变量的内存地址为:
&VariableName
- 完整示例
package main
import (
"fmt"
"reflect"
)
func main() {
name := "刘备" //定义一个字串
namePointer := &name //指针指向该字串
fmt.Printf("nameProinter类型为:%s\n",reflect.TypeOf(namePointer))
fmt.Println("指针值:",namePointer)
fmt.Println("指针指向值:",*namePointer)
}
结果
nameProinter类型为:*string
指针值: 0xc000040250
指针指向值: 刘备
4. 空指针判断
上文声明指针的时候我们了解了什么是空指针,也知道了空指针打印指向值程序会崩溃。
程序中为避免这种情况,我们在使用指针指向值的时候,需要对空指针进行判断。
- 下边代码程序会崩溃
下边代码我们注释掉给指针赋值的两行,因为指针即没有赋值也没有初始化,因此指针为空。打印指针指向结果时,程序将崩溃。
package main
import "fmt"
func main() {
//name := "刘备"
var namePointer *string
//namePointer = &name
fmt.Println("namePointer 指向值为:",namePointer)
}
- 指针判断
package main
import "fmt"
func main() {
//name := "刘备"
var namePointer *string
//namePointer = &name
if namePointer == nil{
fmt.Println("指针为空")
}else {
fmt.Println("指针指向值为:",*namePointer)
}
}
结果
指针为空
5. 指向指针的指针
package main
import "fmt"
func main() {
name := "刘备"
nameP := &name //指针
namePP := &nameP //指向指针的指针
fmt.Println("namePP:",namePP)
fmt.Println("*namePP:",*namePP,"\tnameP:",nameP)
fmt.Println("**namePP:",**namePP) //打印指向指针的指针的指向值的指向值
}
结果:
namePP: 0xc00000a028
*namePP: 0xc000040250 nameP: 0xc000040250
**namePP: 刘备
如上可见:
namePP
是指向指针的指针,*namePP
是“指向指针的指针”的指向值,即指针nameP
的值,也就是存储变量name
值的内存地址。- 继续推,可知
**namePP
即是变量name
的值
posted on 2022-12-07 10:34 运维开发玄德公 阅读(108) 评论(0) 编辑 收藏 举报 来源