26、Go 复合数据类型 - 切片(slice)
hi,我是温新
在 GO 语言中,new 和 make 都用来分配内存。nwe 只用于内存分配,make 用于 slice、map、channel 的初始化。
new 函数
new(类型) 函数一个内置函数,用于分配内存。下面通过案例来学习 new 函数的使用。
已存在变量
对于一个已经存在的变量,可以使用指针进行赋值。
package main
import "fmt"
func main() {
    // 声明一个变量
    var p int
    // 把变量 p 的指针赋值给 变量 v
    v := &p
    // 通过指针修改值
    *v = 100
    fmt.Println(p, *v) // 100 100
}
声明指针变量
1)声明指针变量
package main
import "fmt"
func main() {
    // 声明指针变量 p
    var p *int
    fmt.Println(p) // 值为 <nil>
    // 对指针变量赋值
    *p = 100
}
1、声明了一个指针变量 p,此时在内存中开辟出一块空间,其存储的值为 <nil>。注意开辟了内存空间,存的值是 nil,但是没有分配内存地址;
2、*p 通过地址赋值,此时就会报错,原因是指针变量 p,开辟了内存空间但是没有内存地址,其报错如下:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x1 addr=0x0 pc=0xb9def1]
2)使用 new 函数分配内存地址
package main
import "fmt"
func main() {
    var p *int
    // 使用 new 函数变指针变量初始化内存地址
    p = new(int)
    *p = 100
    fmt.Println(*p)
}
1、初始化一个指针变量时,它的值是 nil,nil 无法直接赋值;
2、使用 new 函数返回一个指向新分配的类型为 int ·的指针,该指针指向的内容的值为 零,并值地址指向到指针变量 p;
3、为指针变量赋值。
请登录后再评论