• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【原创】go语言学习(九)指针类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目录

  • 变量和内存地址
  • 指针类型
  • 值拷贝和引用拷贝

变量和内存地址

1、每个变量都有内存地址,可以说通过变量来操作对应大小的内存

var a int32
a = 100
fmt.Printf(“%d\n”, a)
fmt.Printf(“%p\n”, &a)

  注意:通过&符号可以获取变量的地址

指针类型

1、普通变量存储的是对应类型的值,这些类型就叫值类型

var b int32
b = 156
fmt.Printf(“%d\n”, b)
fmt.Printf(“%p\n”, &b)

  

 

 

 2、指针类型的变量存储的是一个地址,所以又叫指针类型或引用类型

 

var b int32
b = 156
var a *int32
a = &b

  

3、指针类型定义,var 变量名 *类型

package main
import (
    "fmt"
)
func main() {
    b := 255
    var a *int = &b
    fmt.Printf("Type of a is %T\n", a)
    fmt.Println("address of b is", a)
}

  

4、 指针类型变量的默认值为nil,也就是空地址

package main
import (
    "fmt"
)
func main() {
    a := 25
    var b *int
    if b == nil {
        fmt.Println("b is", b)
        b = &a
        fmt.Println("b after initialization is", b)
    }
}

  

5、如果操作指针变量量指向的地址⾥里里⾯面的值呢?

package main
import (
    "fmt"
)
func main() {
    b := 255
    a := &b
    fmt.Println("address of b is", a)
    fmt.Println("value of b is", *a)
}

  注意:通过* 符号可以获取指针变量量指向的变量

6、通过指针修改变量的值

package main
import (
  "fmt"
)
func main() {
  b := 255
  a := &b
  fmt.Println("address of b is", a)
  fmt.Println("value of b is", *a)
  *a++
  fmt.Println("new value of b is", b)
}

7、指针变量传参

package main
import (
    "fmt"
)
func change(val *int) {
    *val = 55
}
func main() {
    a := 58
    fmt.Println("value of a before function call is",a)
    b := &a
    change(b)
    fmt.Println("value of a after function call is", a)
}

  

8、 指针变量传参示例2

package main
import (
    "fmt"
)
func modify(arr *[3]int) {
    (*arr)[0] = 90
}
func main() {
    a := [3]int{89, 90, 91}
    modify(&a)
    fmt.Println(a)
}

  

9、切片传参

package main
import (
    "fmt"
)
func modify(sls []int) {
    sls[0] = 90
}
func main() {
    a := [3]int{89, 90, 91}
    modify(a[:])
    fmt.Println(a)
}

  

10、make用来分配引用类型的内存,比如 map、slice以及channel。new用来分配除引用类型的所有其他类型的内存,比如 int、数组等

 

值拷贝和引用拷贝

1、值拷贝和引⽤用拷贝

a-->100 b-->100

package main
import (
    "fmt"
)
func main() {
    var a int = 100
    b := a
}

  

 

 b --> a c--> a a--> 100

package main
import (
  "fmt"
)
func main() {
  var a int = 100
  var b *int = &a
  var c *int = b
  *c = 200
}

  

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go内置的定时器发布时间:2022-07-10
下一篇:
go bigfile (文件传输管理系统)前端分片上传demo发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap