1. 指针
1.1 基本介绍
- 基本的数据类型,变量存储的是值,也叫值类型。
-
获取变量的地址的地址,使用&符。例如:var i int, 获取i的地址:&i
分析一下基本的数据类型在内存中布局。
package main
import "fmt"
// 演示golang中的指针类型
func main() {
// 基本数据类型在内存中的布局
var i int = 10
// i 的内存地址是什么? , &i
fmt.Println("i的地址=",&i)
}
-
指针类型,指针变量存的是一个地址,这个地址指向的空间才是存的才是值。例如:var ptr *int = &i
举例说明指针在内存的布局。
package main
import "fmt"
// 演示golang中的指针类型
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)
}
-
获取指针类型所指向的值,使用:* 。例如:var ptr *int ,使用 *ptr 获取ptr指向的值。
-
通过指针去修改变量的值
使用指针的细节说明
- 值类型都有对应的指针类型,形式为“数据类型”,比如int对应的指针类型就是 *int ,float32对应的指针类型为 *float32 ,依次类推。
- 值类型包括:基本数据类型 (int 系列,float系列,bool,string)、数组和结构体struct。
7.指针的课堂练习
// 题目1
func main(){
var a int = 100
var ptr *int = a // 这是错误的,指针只能接收变量的地址,不能直接复制变量的值
}
// 题目2
func main(){
var a int = 100
var ptr *float32 = &a // float32 的指针变量ptr能接收的地址只能是float32,不能是int类型(乐行错误)
}
// 题目3
func main(){
var a int = 300
var b int = 400
var ptr *int = &a
*ptr = 100 //此时a=100
ptr = &b // 此时ptr指针的值等于变量b的值400
*ptr = 200 // 此时指针和变量b的值等于200
fmt.Printf("a=%d, b=%d, ptr=%d", a,b,*ptr)
}