GO语言基础教程12——指针

145 阅读1分钟

GO语言基础教程12——指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。

Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取值)。

指针地址和指针类型

每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用&字符放在变量前面对变量进行“取地址”操作。

ptr := &v

例如:

func main() {
	a := 10
	b := &a
        fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc00001a078
	fmt.Println(&b)                    // 0xc00000e018
}

指针取值

在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用*操作。

例如:

func main() {
	//指针取值
	a := 10
	b := &a
	c := *b // 指针取值(根据指针去内存取值)
        fmt.println(c) // 10
}

取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

指针传值:

func text1(x int) {
	x = 100
}

func text2(x *int) {
	*x = 100
}

func main() {
	a := 10
	text1(a)
	fmt.Println(a) // 10
	text2(&a)
	fmt.Println(a) // 100
}

new

注意: 不能直接声明指针然后赋值

可以通过new()方法来进行初始化。

例如:

func main() {
	a = new(int)
	*a = 10
	fmt.Println(*a)
}

(点击进入专栏查看详细教程)