暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

go语言基础-指针

学徒杨新建 2020-08-13
967

Go语言中的指针不能进行偏移和运算,因此被称为安全指针。

需要理解的概念: 
指针地址:指针变量的值是指针地址。 
指针类型:Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:int、int64、string等。 
指针取值:在对普通变量使用&操作符取地址后会获得这个变量的指针,然后可以对指针使用
操作,也就是指针取值。

如下示例:

  1. a是值为10的一个变量

  2. a的内存地址给了b,那么b就是int类型的指针

  3. b这个指针的地址给了c,那么c就是指向指针b的指针


  4. func main() {

  5. a := 10

  6. b := &a

  7. c := &b

  8. fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc0000a0880

  9. fmt.Printf("b:%p type:%T\n", b, b) // b:0xc0000a0880 type:*int

  10. fmt.Println(&b) //0xc0000ca020

  11. fmt.Println(*b) //10

  12. fmt.Println(*c) //0xc0000108c0

  13. }

复制

new与make函数

在Go语言中对于引用类型的变量,在使用的时候不仅要声明,还要为它分配内存空间,否则我们的值就没办法存储。 
而对于值类型的声明不需要分配内存空间,因为它们在声明的时候已经默认分配好了内存空间。 
Go语言中new和make是内建的两个函数,主要用来分配内存,这两个函数并不常用。

new与make的区别

二者都是用来做内存分配的。 
make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身; 
而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

new函数示例:

  1. var a *int只是声明了一个指针变量a,没有初始化,指针作为引用类型需要初始化后才会拥有内存空间,才可以给它赋值。

  2. 如下使用内置的new函数对a进行初始化之后就可以正常对其赋值了:


  3. func main() {

  4. var a *int

  5. a = new(int)

  6. *a = 10

  7. fmt.Println(*a)

  8. }

复制

make函数示例:

  1. var b map[string]int只是声明变量b是一个map类型的变量,需要使用make函数进行初始化操作之后,才能对其进行键值对赋值.


  2. func main() {

  3. var b map[string]int

  4. b = make(map[string]int, 10)

  5. b["test"] = 100

  6. fmt.Println(b)

  7. }

复制


文章转载自学徒杨新建,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论