Go语言-指针

指针

  • 指针是存储另一个变量内存地址的变量
  • 取址符号:&
  • 获取地址内容 : *
	//1、定义一个整数a
	a := 10
	fmt.Println(a, &a)   //10 0xc0000a6058
	//2、将a内存地址赋值b
	b := &a              
	fmt.Println(b, &b, *b)//*b:指向a的值    0xc0000a6058 0xc0000ca020 10
	//3、将b的值更改
	*b = 20
	fmt.Println(a, &a)      //20 0xc0000a6058

	//4.定义一个指针变量
	var p *int
	p = &a
	*p = 20;    //为指针变量指向的地址赋值

	//5.嵌套指针
	var ptr **int         //可以将*int看作一个整体
	ptr = &p
	fmt.Printf("ptr存储的p的地址:%p\t,ptr指向p的值:%d\n", ptr, *ptr) //ptr存储的p的地址:0xc0000ca020   ,ptr指向p的值:824634400856
	fmt.Printf("ptr自己的地址:%p\t,ptr取p变量的值为:%d\n", &ptr, **ptr)//ptr自己的地址:0xc0000ca028      ,ptr取p变量的值为:20

(1)指针数组与数组指针

  • 数组指针:一个指向数组的指针
  • 指针数组:存储数据类型为指针的数组

数组指针

	//1、定义一个数组
	arr := [4]int{1, 2, 3, 4}
	fmt.Printf("arr的内存地址:%p\n", &arr)   //arr的内存地址:0xc000012200

	//2、定义一个指针,指向数组
	var p *[4]int
	p = &arr
	fmt.Printf("p-->arr的内存地址:%p\n", p) //p-->arr的内存地址:0xc000012200
	fmt.Printf("p-->arr的值:%d\n", *p)   //p-->arr的值:[1 2 3 4]
	fmt.Printf("p自己的地址:%p\n", &p)    //p自己的地址:0xc00000a030

	//3、将数组的第一、二个元素改变
	(*p)[0] = 100
	//也可以简写
	p[1] = 200
	fmt.Printf("p-->arr的值:%d\n", *p)   //p-->arr的值:[100 200 3 4]

指针数组

	a := 1
	b := 2
	c := 3
	d := 4
	arr2 := [4]*int{&a, &b, &c, &d}   //定义一个指针数组
	fmt.Println(arr2)   //[0xc00001c0a8 0xc00001c0d0 0xc00001c0d8 0xc00001c0e0]
	fmt.Println(*arr2[0]) //1
	*arr2[0] = 100
	fmt.Println(*arr2[0])  //100

(2)指针函数

指针函数:返回值为指针的函数

func f1() *[4]int {
	arr1 := [4]int{1, 2, 3, 4}
	return &arr1

}

(3)指针作为参数

func f2(ptr2 *int) {
   fmt.Println("ptr2:", ptr2)
   fmt.Println("*ptr2:", *ptr2)
   *ptr2 = 100
}
posted @ 2023-10-30 22:19  silly_fox  阅读(10)  评论(0编辑  收藏  举报