指针
指针
- 基本数据类型,变量存的就是值,也叫值类型
- 获取变量的地址,用&
package main
import "fmt"
//演示golang中的指针类型
func main(){
//基本数据类型在内存布局
var i int = 10
//i 的地址是什么,&i
fmt.Println("i的地址是",&i)
}
输出
i的地址是 0xc0000aa058
- 指针类型,变量存的是一个地址,这个地址指向的空间存的才是值
package main
import "fmt"
//演示golang中的指针类型
func main(){
//基本数据类型在内存布局
var i int = 10
//i 的地址是什么,&i
fmt.Println("i的地址是",&i)
//1.ptr是一个指针变量
//2.ptr的类型是*int
//3.ptr本身的值是&i
var ptr *int = &i
fmt.Printf("ptr=%v",ptr)
fmt.Printf("ptr的地址是%v",&ptr)
}
输出
i的地址是 0xc00000a098
ptr=0xc00000a098
ptr的地址是0xc000006030
- 获取指针类型所指向的值,使用*
fmt.Printf("ptr指向的值=%v\n",*ptr)
输出
ptr指向的值=10
案例一:写一个程序,获取一个int变量num的地址,并显示到终端
package main
import "fmt"
func main(){
var num int = 1
fmt.Printf("num的地址%v",&num)
}
输出
num的地址0xc00000a098
案例二:将num的地址赋值给指针ptr,并通过ptr去修改num的值
package main
import "fmt"
func main(){
var num int = 1
fmt.Printf("num的地址%\n",&num)
var ptr *int
ptr = &num
*ptr = 10 //这里修改时,会导致num值变化
fmt.Println("num = ",num)
}
输出
num的地址0xc00000a098
num = 10
指针的使用细节
- 值类型都有对应的指针类型,形式为 *数据类型,比如int的对应的指针就是 *int,float32对应的指针类型就是 *float
- 值类型包括:基本数据类型int系列,float系列,bool,string,数组和结构体struct
浙公网安备 33010602011771号