2023-10-29 第二阶段(指针)

2023-10-28  本文已影响0人  护念

这是第二部分学习笔记

关于指针

go中的指针相比c中简单不少,他没有指针的运算,所以比较安全;用的最多的是作为引用来使用。

1. 指针关键点

其实关键的几个点记住就行了。

a := 10

ptr := &a // 取变量a的地址
b := *ptr    // 指针的变量值
*ptr = 20  // 改变指针变量的值

var p *int // int型指针
c := 30
p = &c 

// 测试
fmt.Printf("%p\n", p)
// 0xc0000a6018
fmt.Println(a, b, c)
//20 10 30

2. 对于引用类型,申明后不会分配内存没法直接使用

这点非常值得注意,也很容易出错。

错误示范

 var p *int // 这里是一个空指针<nil>

*p = 20  // 直接指针变量赋值 不行

报错如下:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1057602]

3. new 和 make的作用在于会分配内存

new(T) *T  // 返回一个指针类型
a := new(int)
*a = 20

fmt.Printf("a地址:%p; a变量%v", a, *a)
//a地址:0xc0000a6018; a变量20% 

4. 空指针

var a *int
if a == nil {
  fmt.Println("a是空指针")
} else {
  fmt.Println("a是非空指针")
}
上一篇下一篇

猜你喜欢

热点阅读