- 1.指针
- 2.指针指向指针
- 3.数组指针与指针数组
- 4.指针函数
- 5.指针为函数的参数
1.指针
- 一个指针变量指向了一个值的内存地址- 定义指针变量- 为指针变量赋值:&- 修改指针变量中多指向地址的值:*
func main() {var a int =10 //声明变量fmt.Printf("a内存地址:%p\n",&a)var p *int //声明指针p=&a //p存储a的内存地址fmt.Println("p存储的地址:",p)fmt.Println("p自己的内存地址:",&p)//修改a或者*p的值,所指向同一个地址的变量的值都会变化a =20fmt.Println("a的值",a)fmt.Println("p的值",*p)*p=30fmt.Println("a的值",a)fmt.Println("p的值",*p)}
2.指针指向指针
- 格式:var p **int- 一个指针变量存放的是另一个指针变量的地址- 第一个指针变量存放第二个指针的地址,第二个指针存放变量的地址
func main() {var a int = 10 //声明普通变量var ptr *int //声明指针变量var pptr **int //声明指向指针的指针变量ptr = &a //将a的地址赋值给ptrpptr = &ptr //将ptr的地址赋值给pptrfmt.Printf("a的值是%d,a的地址是%p\n", a, &a)fmt.Printf("*ptr的值是%d,*ptr存储的地址是%p,*ptr的地址是%p\n", *ptr, ptr, &ptr)fmt.Printf("**pptr的值是%d,**ptr存储的地址是%p,**ptr的地址是%p\n", **pptr, pptr, &pptr)**pptr = 20fmt.Println(a, ",", *ptr) //20,20}
3.数组指针与指针数组
- 数组指针:是一个指针,指向了数组
func main() {//创建数组var a =[4]int{1,2,3,4}fmt.Printf("数组地址:%p\n",&a)//创建一个指针,指向数组var p *[4]intp=&afmt.Printf("p指向的地址:%p\n",p)fmt.Println("p自己的地址:",&p)fmt.Println("p指向的值:",*p)//用数组指针修改数组//1.原生写法(*p)[0]=100fmt.Println(a[0])//2.简便写法p[0]=200fmt.Println(a[0])}
- 指针数组:是一个数组,保存的指针
func main() {a:=1b:=2c:=3//创建一个指针数组var p=[3]*int{&a,&b,&c}fmt.Println(p)//通过指针修改a的值*p[0]=100fmt.Println(a)a=200fmt.Println(*p[0])}
4.指针函数
- 函数的返回值是指针
func main() {//调用该函数返回的是一个指针ptr := p1()fmt.Println("ptr指向地址的值", *ptr)fmt.Printf("ptr自己内存地址:%p\n", &ptr)fmt.Printf("ptr指向的内存地址%p", ptr)}//类型为指针的函数func p1() *[4]int {arr := [4]int{1, 2, 3, 4}fmt.Printf("arr地址:%p\n", &arr)return &arr //返回指针}
5.指针为函数的参数
- 函数的参数为指针
func main() {a :=10fmt.Println("a的地址是",&a)p1(&a)}//参数为指针的函数func p1(ptr *int) {fmt.Println("ptr存放的地址是",ptr)fmt.Println("ptr的值是",*ptr)}
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论