Go 指针变量,内存模型

demo.go(定义指针变量):

package main

import "fmt"

func main() {
	a := 100  // int类型
	fmt.Printf("%p \n", &a)  // 0xc00004c080

	// 定义指针变量
	var p *int = &a
	fmt.Printf("%p \n", p)  // 0xc00004c080  p指针变量本身就是一个地址,不需要&取其地址

	// 通过指针p修改变量a的值 (*表示取指针指向的值)
	*p = 123
	fmt.Println(a)  // 123

	// p  *p  a  &a
	fmt.Println(p)   // 0xc00004c080  (地址)
	fmt.Println(*p)  // 123   (值)
	fmt.Println(a)   // 123   (值)
	fmt.Println(&a)  // 0xc00004c080 (地址)


	// 声明指针变量  (第二种方式定义指针变量)
	var p2 *int  // 指针变量的默认值是0x0(nil 空指针) (0x0内存地址为0 0-255的空间为系统占用,不允许用户访问(读写))
	fmt.Println(p2)  // <nil>
	// *p2 = 111  // 会报错。 空指针(nil)不能进行引用。
	p2 = new(int)  // new(数据类型) 表示开辟内存空间,返回指针类型。  (go语言中,没有被引用的内存空间会自动释放(引用计数))
	fmt.Println(p2)  // 0xc00004c0c0
	*p2 = 111    // 不会报错。 p2不是空指针(nil)
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/88681848