Go指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 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) 		   // 一般使用   
}

猜你喜欢

转载自blog.csdn.net/wyy626562203/article/details/83411878