美文网首页
14 Golang 指针详解

14 Golang 指针详解

作者: learninginto | 来源:发表于2021-03-25 10:21 被阅读0次

指针也是一个变量,但它存储的数据不是一个普通的值,而是另一个变量的内存地址。

var p int = 10
fmt.Printf("p的值:%v p的类型%T p的地址%p", p, p, &p)
//p的值:10 p的类型int p的地址0xc420010050

var a = 10
var p = &a
fmt.Printf("a的值:%v a的类型%T a的地址%p\n", a, a, &a)
fmt.Printf("p的值:%v p的类型%T p的地址%p", p, p, &p)
//a的值:10 a的类型int a的地址0xc420010050
//p的值:0xc420010050 p的类型*int p的地址0xc42000c030

Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如int、int64、*string等。

  • 取变量指针的语法
ptr := &v

其中:v代表被取地址的变量,类型为T

ptr:用于接受地址的变量,ptr的类型就为*T,称做T的指针类型。

  • demo1
a := 10
p := &a
fmt.Println(p,*p)//a的地址,10
*p = 30
fmt.Println(a)//30
  • demo2
func fn1(x int) {
    x = 10
}

func fn2(x *int) {
    *x = 40
}

func main() {
    var a = 5
    fn1(a)
    fmt.Println(a)//5
    fn2(&a)
    fmt.Println(a)//40
}
  • 引用数据类型必须要先创建内存空间

错误案例

var userInfo = map[string]string
userInfo["username"]="zhangsan"
fmt.Println(userInfo)//type map[string]string is not an expression

正确写法

var userInfo = make(map[string]string)
userInfo["username"] = "张三"
fmt.Println(userInfo)//map[username:张三]

切片同理

var a []int
a[0] = 1
fmt.Println(a)
//panic:runtime error:index out of range [0] with length 0

正确写法

var a = make([]int, 4, 4)
a[0] = 1
fmt.Println(a) //[1 0 0 0]

指针同理

var a *int
*a = 100
fmt.Println(*a)
//panic: runtime error: invalid memory address or nil pointer dereference

正确写法

var a = new(int)
//a是一个指针变量,*int的指针类型,值为0
fmt.Printf("值:%v 类型:%T 指针变量对应的值:%v",a,a,*a)
//值:0xc420010050 类型:*int 指针变量对应的值:0

var b *int
b = new(int)
*b = 100
fmt.Println(*b)//100

new方法给指针变量分配存储空间(很少用)

  • new与make的区别

make只用于slice、map以及channel(通道)的初始化,返回的还是这三个引用类型本身
new用于类型的内存分配,返回的是指向类型的指针。

相关文章

  • 14 Golang 指针详解

    指针也是一个变量,但它存储的数据不是一个普通的值,而是另一个变量的内存地址。 Go语言中的值类型(int、floa...

  • Golang基础(三)——复杂类型

    Golang基础(三)——复杂类型 @([07] golang)[Go总结] [TOC] 指针 定义 指针变量可以...

  • Go map底层实现

    golang map源码详解Golang map 如何进行删除操作?

  • 后端研发体系

    记录自己为了面试发现的文章 golang golang中都是值传递,没有引用传递,哪怕是指针,也是指针的值拷贝。 ...

  • 红黑树的原理详解及golang实现

    # 红黑树原理详解及golang实现

  • golang指针

    关于指针,我的理解是这样的,它指向一个内存的地址,也就是某个类型在内存中存放的地方。 定义一个指针 var d *...

  • golang 指针

    在Go语言中,有几种东西可以代表“指针”。  1. uintptr类型:该类型实际上是一个数值类型,也是Go语言内...

  • golang 指针

    1.Golang提供了指针用于操作数据内存,并通过引用来修改变量。只声明未赋值的变量,golang都会自动为其初始...

  • golang 指针

    package main import "fmt" //=============================...

  • Golang:指针

    什么是指针? 指针是存储另一个变量的内存地址的变量。 在上面的例子中,变量 b 的值是 156,存储在地址为 0x...

网友评论

      本文标题:14 Golang 指针详解

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