指针
基本介绍
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\n", ptr)
fmt.Printf("ptr 的地址=%v\n", &ptr)
fmt.Printf("ptr 指向的值=%v\n", *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\n", &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