【GO语言学习 基础篇】07 指针和地址

源代码

go语言基础


这还是蛮重要的知识点,带不带星号有啥区别?这里还涉及到结构体的知识,建议和下一章节一起食用!!!

指针和地址

每个变量都有地址,在学习 c 语言的时候讲过,在新建一个变量的时候,
内存中会开辟一个新的空间用于储存数据,这个空间有个地址。
当然也不是所有的语言在新建的时候就开辟空间,有的是没有数据,不开辟空间。

指针改变原始值的值,就好像顺着网线找到你家里。

还有一些用法,比如指针传参,指针数组之类的,请自行探索。

  • 指针

    package main
    
    import "fmt"
    
    func pointer() {
        /*
                指针不能指向一个具体的值
                    var a int
                    a = 123
                    // b是一个地址值
                    var b *int
                    b = a  这样是不行的
                    // & 代表了取a的地址
                    b = &a 这个时候 b指向了a的地址
                    // *b 根据地址找到值
                    *b = 999  这个时候 a = 999
        */
        // 通过自定义普通变量获取指针
        x := "go"
        // 获取地址
        ptr := &x
        fmt.Println("x=", x)
        fmt.Println("ptr=", ptr)
        fmt.Println("&x=", &x)
        fmt.Println("*ptr=", *ptr)
        fmt.Println("---------------------------------")
    
        // new是先创建好指针并分配内存,再写入指针的值
        ptr2 := new(string)
        *ptr2 = "c"
        fmt.Println(ptr2)
        fmt.Println(*ptr2)
    
        // 先声明一个指针变量,再从其他变量获取内存地址指针变量
        x2 := 1
        var p *int = &x2 // *int 因为 x2 是int类型的
        fmt.Println(p)
        fmt.Println(*p)
    
        // & 可以通过变量获取该变量的地址
        // * 赋在值的左边(*p) 指该指针指向的变量(p是变量地址)
    }
    
    func pointerType() {
        myStr := "go"
        myInt := 1
        myBool := false
        myFloat := 3.2
        fmt.Printf("type of &myStr is:%T\n", &myStr)
        fmt.Printf("type of &myInt is:%T\n", &myInt)
        fmt.Printf("type of &myBool is:%T\n", &myBool)
        fmt.Printf("type of &myFloat is:%T\n", &myFloat)
    }
    
    func zeroPointer() {
        x := "go"
        var ptr *string
        fmt.Println("ptr is ", ptr)
        // 声明但是没有初始化
        ptr = &x
        fmt.Println("ptr is ", ptr)
    
    }
    
    func changeByPointer(value *int) {
        // value是地址 *value是值
        *value = 200
    }
    
    func test01() {
        x3 := 99
        p3 := &x3
        fmt.Println("执行changeByPointer函数之前*p3是", *p3)
        fmt.Println("执行changeByPointer函数之前p3是", p3)
        changeByPointer(p3)
        fmt.Println("执行changeByPointer函数之后*p3是", *p3)
        fmt.Println("执行changeByPointer函数之后p3是", p3)
    }
    
    func changeSlice(value []int) {
        // 这里是传递的值进来
        value[0] = 200
    }
    
    func changeArray(value *[3]int) {
        // 这里是传递的地址
        (*value)[1] = 200
    }
    
    func test02() {
        x4 := [3]int{10, 20, 30}
        changeSlice(x4[:])
        fmt.Println(x4)
        changeArray(&x4)
        fmt.Println(x4)
    }
    
    func main() {
        // go语言中不支持指针运算
        pointer()
        fmt.Println("---------------------------------")
        pointerType()
        fmt.Println("---------------------------------")
        zeroPointer()
        fmt.Println("---------------------------------")
        test01()
        fmt.Println("---------------------------------")
        test02()
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《Java语言程序设计(基础) PDF》是一本介绍Java语言基础知识和编程技巧的电子书。这本书主要分为七个部分,从基本的概念开始逐步讲解Java语言的各个方面。 第一部分介绍了Java的发展历史和编程环境的安装,以及Java程序的基本结构和执行过程。读者可以了解到Java语言的特点和运行原理。 第二部分介绍了Java的数据类型和变量,包括基本数据类型、引用数据类型和常量的使用方法。此外,还详细介绍了Java的运算符和表达式的使用。 第三部分是关于流程控制的内容,包括条件语句、循环语句和选择结构。通过学习这一部分,读者可以了解Java的条件判断和循环执行的方法。 第四部分介绍了数组和方法的使用,包括数组的声明和初始化、数组的遍历和排序,以及方法的定义和调用。这些是Java程序设计常用的基本工具。 第五部分是关于面向对象编程的内容,包括类的概念、对象的创建和使用,以及封装、继承和多态等面向对象的基本概念和技巧。 第六部分介绍了异常处理和文件操作的方法。Java提供了强大的异常处理机制,可以帮助程序员处理潜在的错误情况。同时,Java也提供了丰富的文件操作功能,可以方便地进行文件的读写操作。 最后一部分介绍了Java的图形用户界面和事件处理。这些内容可以帮助读者了解如何使用Java创建图形化界面,并且可以对用户的操作做出相应的响应。 总的来说,《Java语言程序设计(基础) PDF》是一本系统全面、内容详细的Java语言教材,适用于初学者和有一定编程基础的读者。通过阅读这本书,读者可以全面掌握Java语言的基本知识和编程技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值