指针

基本介绍

1)基本数据类型,变量存的就是值,也叫值类型
2)获取变量的地址,用&,比如:var num int , 获取num的地址:&num
[root@node3 shangxuetang]# cat pointer.go
package main

import "fmt"

func main() {

  //基本数据类型在内存的布局
  var i int = 10
  //i 的地址是什么,&i
  fmt.Println("i的地址=", &i)

}

3)指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值。比如: var ptr *int = &num
4)获取指针类型锁指向的值,使用:*,比如: var prt *int, 使用*prt 获取 ptr 指向的值
5)举例说明
  var num int = 1
  var i = 999
  var ptr *int = &i


[root@node3 shangxuetang]# cat pointer.go
package main

import "fmt"

func main() {

  //基本数据类型在内存的布局
  var i int = 10
  //i 的地址是什么,&i
  fmt.Println("i的地址=", &i)

  //下面的 var ptr *int = &i
  //1. ptr 是一个指针变量
  //2. ptr 是类型 *int
  //3. ptr 本身的值&i

  var ptr *int = &i
  fmt.Printf("ptr=%v ", ptr)
  fmt.Printf("ptr 的地址=%v ", &ptr)
  fmt.Printf("ptr 指向的值=%v ", *ptr)

}
[root@node3 shangxuetang]# go run pointer.go
i的地址= 0xc4200100b8
ptr=0xc4200100b8
ptr 的地址=0xc42000c038
ptr 指向的值=10

练习题:

1、写一个程序,获取一个int变量num的地址,并显示到终端
2、将num的地址赋给指针 ptr,并通过ptr去修改num的值。
[root@node3 shangxuetang]# cat lianxi.go
package main

import "fmt"

func main() {

  var num int = 9
  fmt.Printf("num address=%v ", &num)

  var ptr *int
  ptr = &num

  *ptr = 10 //这里修改时,会导致num的值变化
  fmt.Println("num =", num)
}
[root@node3 shangxuetang]# go run lianxi.go
num address=0xc4200100b8
num = 10

指针细节说明:

1)值类型,都有对应的指针类型,形式为 *数据类型,比如int的对应的指针就是*int,float32 对应的指针类型就是 *float32,依次类推。
2)值类型包括:基本数据类型 int 系列,float系列,bool,string、数组和结构体struct

原文地址:https://www.cnblogs.com/green-frog-2019/p/11342601.html