美文网首页
第03天(复合类型)_01

第03天(复合类型)_01

作者: lucas777 | 来源:发表于2019-12-05 17:00 被阅读0次

    01_指针基本操作.go

    package main //必须有个main包
    
    import "fmt"
    
    func main() {
        var a int = 10
        //每个变量有2层含义:变量的内存,变量的地址
        fmt.Printf("a = %d\n", a) //变量的内存
        fmt.Printf("&a = %v\n", &a)
    
        //保存某个变量的地址,需要指针类型   *int 保存int的地址, **int 保存 *int 地址
        //声明(定义), 定义只是特殊的声明
        //定义一个变量p, 类型为*int
        var p *int
        p = &a //指针变量指向谁,就把谁的地址赋值给指针变量
        fmt.Printf("p = %v, &a = %v\n", p, &a)
    
        *p = 666 //*p操作的不是p的内存,是p所指向的内存(就是a)
        fmt.Printf("*p = %v, a = %v\n", *p, a)
    
    }
    

    02_不要操作没有合法指向的内存.go

    package main //必须有个main包
    
    import "fmt"
    
    func main() {
        var p *int
        p = nil
        fmt.Println("p = ", p)
    
        //*p = 666 //err, 因为p没有合法指向
    
        var a int
        p = &a //p指向a
        *p = 666
        fmt.Println("a = ", a)
    }
    

    03_new函数的使用.go

    package main //必须有个main包
    import "fmt"
    func main() {
        //a := 10 //整型变量a
        var p *int
        //指向一个合法内存
        //p = &a
        //p是*int, 指向int类型
        p = new(int)
        *p = 666
        fmt.Println("*p = ", *p)
        q := new(int) //自动推导类型
        *q = 777
        fmt.Println("*q = ", *q)
    }
    

    04_普通变量做函数参数.go

    package main //必须有个main包
    import "fmt"
    func swap(a, b int) {
        a, b = b, a
        fmt.Printf("swap: a = %d, b = %d\n", a, b)
    }
    func main() {
        a, b := 10, 20
    
        //通过一个函数交换a和b的内容
        swap(a, b) //变量本身传递,值传递(站在变量角度)
        fmt.Printf("main: a = %d, b = %d\n", a, b)
    }
    

    05_指针做函数参数.go

    package main //必须有个main包
    import "fmt"
    func swap(p1, p2 *int) {
        *p1, *p2 = *p2, *p1
    }
    func main() {
        a, b := 10, 20
    
        //通过一个函数交换a和b的内容
        swap(&a, &b) //地址传递
        fmt.Printf("main: a = %d, b = %d\n", a, b)
    }
    

    相关文章

      网友评论

          本文标题:第03天(复合类型)_01

          本文链接:https://www.haomeiwen.com/subject/gxfjgctx.html