go指针简述(11)

2023年 7月 15日 55.3k 0

请输入图片描述

通常而言,在go中,元素赋值一个变量A后,A变量如果在赋值给另外一个变量B,相当于一次复制。对于底层内存地址来讲,对于二次赋值的变量B修改元素,是不会修改到A变量的值,这是因为变量B的内存地址以及发生改变,如果需要修改到变量A,A就需要使用指针调用来赋值给B,大致意思是A和B使用同一个内存地址。

认识指针

通常变量存储在内存空间,如下图

A存储在2,而后赋值B=Azhizhen0824.png

此刻,设置B赋值3,那么赋值是否对A有影响

package main
import "fmt"
func main(){
    A := 2
    B := A
    B = 3
    fmt.Printf("A:%d B:%d",A,B)
}

运行

[root@marksugar /opt/Golang]# go run zhizhen.go
A:2 B:3

上述A是2,B是3,说明赋值给B的3是没有影响到A的值,B是单独的一个值,如下:zhizhen0824-2.png

如果我一定要通过赋值修改A的值,就可以使用指针来进行修改。

如上述中。假如,A赋值的2存储在内存中的地址编号是0DSA6W3,此刻要修改就需要使用A存储的的内存地址进行修改。如下:zhizhen0824-3.png

定义指针

使用&符号取变量地址,而这个类型也是*int,这个类型就是指针类型。

!!! 如果是一个字符串就是*string,如果是bool就是*bool,如果是浮点数就是*float64.

我们定义一个C的指针

var C *int

简短声明

    A := 2
    B := A
    B = 3
    fmt.Printf("A:%d B:%dn",A,B)

    C := &A
    fmt.Printf("%T",C)

运行

[root@marksugar /opt/Golang]# go run zhizhen.go 
A:2 B:3
*int

获取指针值

如果要获取指针的值就需要使用*变量。如:*c

A := 2
C := &A
fmt.Printf("%T %p",C,*C)
[root@marksugar /opt/Golang]# go run zhizhen.go 
A:2 B:3
*int 2

修改指针值

    A := 2
    C := &A
    *C = 666
    fmt.Print(*C)
[root@marksugar /opt/Golang]# go run zhizhen.go
666

golang中的指针没有复杂的运算,相对来讲是安全的。

指针的应用

使用指针

package main
import "fmt"
func main(){
    var name string
    var age int
    var height float64
    fmt.Print("请输入你的名字: ")
    fmt.Scan(&name)
    fmt.Print("请输入你的年龄: ")
    fmt.Scan(&age)
    fmt.Print("请输入你的身高: ")
    fmt.Scan(&height)
    fmt.Printf("你输入的是名字是: [%s]n输入的年龄是: [%d]n输入的身高是: [%f]",name,age,height)
}

运行后输入:

[root@marksugar /opt/Golang]# go run zhizhen2.go 
请输入你的名字: mark
请输入你的年龄: 18
请输入你的身高: 1.7
你输入的是名字是: [mark]
输入的年龄是: [18]
输入的身高是: [1.700000]

现在你必须按照类型输入。

!!! Warning

指针的空值是nil

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论