指针基础知识
package main
import "fmt"
func main() {
var p *int
p = new(int)
*p = 1
fmt.Println(p, &p, *p)
}
输出
0xc04204a080 0xc042068018 1
Go*&p0xc04204a080p0xc0420680180xc04204a0801
| 地址 | 0xc042068018 | 0xc04204a080 |
|---|---|---|
| 值 | 0xc04204a080 | 1 |
错误实例
- 在 golang 中如果我们定义一个指针并像普通变量那样给他赋值,例如下方的代码
package main
import "fmt"
func main() {
var i *int
*i = 1
fmt.Println(i, &i, *i)
}
- 就会报这样的一个错误
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x0 pc=0x493015]
goinili*inil*i*i
解决这个问题非常简单,在给指针赋值前可以先创建一块内存分配给赋值对象即可
package main
import "fmt"
func main() {
var i *int
i = new(int)
*i = 1
fmt.Println(i, &i, *i)
}