文章目录
1、指针
- &符号+变量 就可以获取这个变量内存的地址
*int
是一个指针类型 (可以理解为 指向int类型的指针)
go
package main
import(
"fmt"
)
func main(){
var age int = 18
//&符号+变量 就可以获取这个变量内存的地址
fmt.Println(&age) //0xc0000a2058
//定义一个指针变量:
//var代表要声明一个变量
//ptr 指针变量的名字
//ptr对应的类型是:*int 是一个指针类型 (可以理解为 指向int类型的指针)
//&age就是一个地址,是ptr变量的具体的值
var ptr *int = &age
//这样直接输出,是ptr这个指针变量的值,即0xc0000a2058
fmt.Println(ptr)
//ptr这个指针变量自身的地址
fmt.Println("ptr本身这个存储空间的地址为:",&ptr)
//想获取ptr这个指针或者这个地址指向的那个数据:
fmt.Printf("ptr指向的数值为:%v",*ptr) //ptr指向的数值为:18
}
&
取内存地址*
根据内存地址取值
2、说明
1)可以通过指针去改变它指向的那个变量的值
go
func main(){
var num int = 10
fmt.Println(num) //10
var ptr *int = &num
*ptr = 20
fmt.Println(num) //20
}
2)指针变量接收的一定是地址值
go
//正确写法
var ptr *int = &num
3)指针变量的地址不可以不匹配
go
func main(){
var num int = 10
fmt.Println(num) //10
var ptr *float32 = &num
}
编译报错:cannot use &num(type *int) as type float32 in assignment。因为float32意味着这个指针指向的是float32类型的数据,而&num对应一个int类型的变量
4)基本数据类型,都有对应的指针类型,形式为*数据类型