• golang_09问题


    1. 写⼀个程序,获取⼀个变量的地址,并打印到终端 课后练习 
    2. 写⼀个函数,传⼊⼀个int类型的指针,并在函数中修改所指向的值

    package main import (
    "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().Unix()) fmt.Println(rand.Intn(100)) fmt.Println(rand.Intn(100)) ———————————————— 版权声明:本文为CSDN博主「aslackers」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/aslackers/article/details/78548738 几点注意项: 1、如果不使用rand.Seed(seed int64),每次运行,得到的随机数会一样,程序不停止,一直获取的随机数是不一样的; 2、每次运行时rand.Seed(seed int64),seed的值要不一样,这样生成的随机数才会和上次运行时生成的随机数不一样; 3、rand.Intn(n int)得到的随机数int i,0 <= i < n。 ———————————————— 版权声明:本文为CSDN博主「aslackers」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/aslackers/article/details/78548738

     

    func testPoint7() {
        var a int = 10
        var b *int = &a
        var c *int = b
        *c = 100
        fmt.Printf("*c=%d *b=%d a=%d\n", *c, *b, a)
    
    }
    1.变量和内存地址
    2. 指针类型
    3. 值拷⻉和引⽤拷⻉
    4. 课后练习

    每个变量都有内存地址,可以说通过变量来操作对应⼤⼩的内存

    注意:通过&符号可以获取变量的地址
    func main() {
        var a int32
        a = 1000
        fmt.Printf("the addr of a :%p, a:%d", &a, a)
    }
    普通变量存储的是对应类型的值,这些类型就叫值类型
    
    指针类型的变量存储的是⼀个地址,所以⼜叫指针类型或引⽤类型
    4. 指针类型定义,var 变量名 *类型
    var a *int = &b

    5. 指针类型变量的默认值为nil,也就是空地址
        var b *int
    注意:通过* 符号可以获取指针变量指向的变量
    func testPoint5() {
        var a *int = new(int)
        *a = 100
        fmt.Printf("*a=%d\n", *a)
    
        var b *[]int = new([]int)
        fmt.Printf("*b= %v\n", *b)
        (*b) = make([]int, 5, 100)
        (*b)[0] = 100
        (*b)[1] = 200
        fmt.Printf("*b 的值是 %v", *b)
    }
    通过指针修改变量的值
    func testPoint2() {
        var a int = 200000
        var b *int = &a
        fmt.Printf("b 指向的地址存储的值为;%p,%d\n", &b, b)
        *b = 1000
        fmt.Printf("b 指向的地址存储的值为;%d\n", b)
        fmt.Printf("a 的值为 %d\n", a)
    }
    
    指针变量传参
    
    func modify(a *int) {
        *a = 100
    }



    func modify_arr(a *[3]int) {
        (*a)[0] = 100
    }
    
    func testPoint4() {
        var b [3]int = [3]int{1, 2, 3}
        modify_arr(&b)
        fmt.Printf("b 的值是%v\n", b)
    
    }
    package main
    
    import "fmt"
    
    func testPoint1() {
        var a int32
        a = 100
        fmt.Printf("the add or a :%p a:%d\n", &a, a)
    
        var b *int32 //这里为什么加*
        fmt.Printf("the add or a :%p b;%v\n", &b, b)
        if b == nil {
            fmt.Println("b  is nil addr")
        }
    
        b = &a //这里为什么;将a的内存地址赋值给b的内存地址
        fmt.Printf("the add of b is %p,b %v\n", &b, b)
    }
    
    func testPoint2() {
        var a int = 200000
        var b *int = &a
        fmt.Printf("b 指向的地址存储的值为;%p,%d\n", &b, b)
        *b = 1000
        fmt.Printf("b 指向的地址存储的值为;%d\n", b)
        fmt.Printf("a 的值为 %d\n", a)
    }
    
    func modify(a *int) {
        *a = 100
    }
    
    func testPoint3() {
        var b int = 10
        p := &b
        modify(p)
        fmt.Printf("b 的值是%d", b) //b的值被修改了,为什么呢因为是同一个内存地址
    }
    
    func modify_arr(a *[3]int) {
        (*a)[0] = 100
    }
    
    func testPoint4() {
        var b [3]int = [3]int{1, 2, 3}
        modify_arr(&b)
        fmt.Printf("b 的值是%v\n", b)
    
    }
    
    func testPoint5() {
        var a *int = new(int)
        *a = 100
        fmt.Printf("*a=%d\n", *a)
    
        var b *[]int = new([]int)
        fmt.Printf("*b= %v\n", *b)
        (*b) = make([]int, 5, 100)
        (*b)[0] = 100
        (*b)[1] = 200
        fmt.Printf("*b 的值是 %v", *b)
    }
    
    func modifyInt(a *int) { //传入内存地址,修改值
        *a = 1000
    }
    
    func testPoint6() {
        var b int = 10
        modifyInt(&b)
        fmt.Printf("b=%d\n", b)
    }
    
    func testPoint7() {
        var a int = 10
        var b *int = &a
        var c *int = b
        *c = 100
        fmt.Printf("*c=%d *b=%d a=%d\n", *c, *b, a)
    
    }
    
    func main() {
    
        // testPoint1()
        // testPoint2()
        // testPoint3()
        // testPoint4()
        testPoint5()
        // testPoint6()
        // testPoint7()
    }
    View Code
  • 相关阅读:
    【Linux学习七】软件安装
    【Linux学习六】用户管理
    【Linux学习五】文本处理
    【Linux学习四】正则表达式
    【Linux学习三】VI/VIM全屏文本编辑器
    【Linux学习二】文件系统
    【Linux学习一】命令查看与帮助
    【安装虚拟机四】设置快照和克隆
    【安装虚拟机三】设置Linux IP地址
    SpringBoot之定时任务详解
  • 原文地址:https://www.cnblogs.com/pythonwork/p/16143004.html
Copyright © 2020-2023  润新知