Go之指针

2020-06-01  本文已影响0人  测试探索
1. 指针的概念

指针是存储另一个变量的内存地址的变量

2. 获取变量的地址

Go语言的取地址符是&,放到一个变量前使用就会返回响应变量的内存地址

package main

import "fmt"

func main() {
    a := 10
    fmt.Println("a的数据是: ",a)
    fmt.Printf("%T\n",a)
    fmt.Printf("a的地址是:%p\n",&a)

}
//结果
a的数据是:  10
int
a的地址是:0xc00000a0e8
3. 声明指针

声明指针,*T是指指针变量的类型,它指向T类型的值

var var_name *var-type
var_type:指针类型
var_name:指针变量名
*:用于指定变量是作为一个指针

var ip *int //指向整形

//代码
package main

import "fmt"

func main() {
    a := 10
    //fmt.Println("a的数据是: ",a)
    //fmt.Printf("%T\n",a)
    //fmt.Printf("a的地址是:%p\n",&a)

//  创建一个指针变量,用于存储变量a的地址
    var p1 *int  //<nil>,空指针
    fmt.Println(p1)
    p1 = &a  //p1指向了a的内存地址
    fmt.Println("p1的数值是: ",p1) //p1中存储的是a的地址
    fmt.Printf("p1自己的地址是%P: ",&p1)
    fmt.Println("p1的数值,是a的地址,该地址存储的数据:",*p1)//获取指针指向的变量的数值

//  操作变量,更改数值,不会改变地址
    a = 100
    fmt.Println(a)
    fmt.Printf("%p\n",&a)

//   通过指针,改变变量的数值
    *p1 = 200
    fmt.Println(a)
//   指针的指针
    var p2 **int
    fmt.Println(p2)
    p2 = &p1
    fmt.Printf("a的数据类型是%T,P1的数据类型是%T,P2的数据类型是%T",a,p1,p2)
    fmt.Println("p2的数值是: ",p2) //p1中存储的是a的地址
    fmt.Printf("p2自己的地址是%P: ",&p2)
    fmt.Println("p2存储的地址,一定的数值,就是p1的地址,对应的数据",*p2)
    fmt.Println("p2存储的地址,一定的数值,再获取对应的数值",**p2)
}

//结果
<nil>
p1的数值是:  0xc0000a0090
p1自己的地址是%!P(**int=0xc0000ca018): p1的数值,是a的地址,该地址存储的数据: 10
100
0xc0000a0090
200
<nil>
a的数据类型是int,P1的数据类型是*int,P2的数据类型是**intp2的数值是:  0xc0000ca018
p2自己的地址是%!P(***int=0xc0000ca028): p2存储的地址,一定的数值,就是p1的地址,对应的数据 0xc0000a0090
p2存储的地址,一定的数值,再获取对应的数值 200
上一篇 下一篇

猜你喜欢

热点阅读