【go语言学习笔记】指针

1.指针的基本操作

go语言中,指针的用法类似c语言,具体操作请看demo:

package main

import "fmt"

func main() {
	var a = 10
	fmt.Printf("a = %d\n", a)   //变量的值
	fmt.Printf("&a = %p\n", &a) //变量的地址

	// 保存某个变量的地址,需要指针类型,*int 保存int的地址, **int 保存 *int的地址
	var p *int
	p = &a //指针变量指向谁,就把谁的地址赋值给指针变量
	fmt.Printf("p = %v, &a = %v, *p = %v\n", p, &a, *p)

	*p = 666
	fmt.Println(*p)

}

2.new函数

这里的new函数类似c++中的new关键字,可以分配对应大小的空间,并且无需考虑delete内存空间操作,因为go语言配有垃圾回收机制。

package main
import "fmt"

func main() {
	var p *int

	//p是*int类型,指向int类型
	p = new(int) //go语言有垃圾回收机制,不需要管new出来的空间的生命周期等问题
	*p = 666
	fmt.Println(*P)
}


3.指针的错误用法

go语言对指针进行操作时需要指针有合法的指向,否则就算非法操作。go语言中表示空的关键字为nil,类似c语言中的NULL

package main

import "fmt"

func main() {
	var p *int // 如果没有指向,go语言默认初始化为nil值,下面那句p = nil是不必要的
	p = nil    // go语言中没有NULL,空值为nil
	fmt.Println("p = ", p)

	// *p = 666 ; 错误,因为p没有合法指向

	//正确操作
	var a int
	p = &a
	*p = 666
	fmt.Println(*p)
}
发布了128 篇原创文章 · 获赞 20 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u011544909/article/details/95038936
今日推荐