版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/83411878
Go指针
Go有指针,但没有指针运算,无法使用指针自增自减运算。
新定义的或者没有任何指向的指针值为nil
。
注意:引用空指针是不合法的,会使程序崩溃。
package main
import "fmt"
func main() {
var p *int // 定义一个指针变量
fmt.Printf("%v\n", p) // 打印指针变量,应为没有指向,所以值为nil
var i int // 定义一个整形变量 i
p = &i // 使得 p 指向 i, 获取 i 的地址
fmt.Printf("%v\n", p) // 打印变量 i 内存地址
*p = 520 // 修改指针指向内存地址的数据
fmt.Printf("%v\n", *p) // 打印520
fmt.Printf("%v\n", i) // 打印520
}
c = *p++ 在 Go 语言的代码中是不合法的。
Go 同样也垃圾收集,也就是说无须担心内存分配和回收。Go 有两个内存分配方式,new 和 make ,它们应用于不同的类型。
用 new 分配内存
type test struct
{
name string
}
p := new (test)
用 make 分配内存
make 仅适用于 map,slice 和 channel,并且返回的不是指针。用 new 可以获得特定的指针。
package main
import "fmt"
func main() {
var p *[] int = new ([] int ) // 分配slice结构内存;很少使用
var v [] int = make ([] int , 100) // v指向一个新分配的有 100 个整数的数组
/*==========================*/
var p *[] int = new ([] int ) // 复杂例子
*p = make ([] int , 100, 100)
/*==========================*/
v := make ([] int , 100) // 一般使用
}