前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

指针

作者头像
酷走天涯
发布2019-06-11 16:35:00
3940
发布2019-06-11 16:35:00
举报

本节学习目标

  • 1.什么是指针
  • 2.指针的零值
  • 3.解引用的用法
  • 4.不要使用指针传递数组,应该使用切片
什么是指针?

指针是一种存储变量内存地址(Memory Address)的变量

例如变量 a 的值是123 ,123存储的内存地址为0x123456,则我们定义一个指针类型的变量b,让它的值为0x123456,那么我们去这块物理内存的值时,就能得到123

下面我们用代码演示一下上面的过程

代码语言:javascript
复制
package main

import "fmt"

func main(){
   a := 124
   fmt.Println(&a) // 查看a的地址
 }

image.png

下面我们定义一个指针类型

代码语言:javascript
复制
package main

import "fmt"

func main(){
   a := 124
   fmt.Println(&a) // 查看a的地址
   var b *int = &a
   fmt.Println(b)
 }

image.png

接下来 我们取地址下面的值

代码语言:javascript
复制
package main

import "fmt"

func main(){
   a := 124
   fmt.Println(&a) // 查看a的地址
   var b *int = &a
   fmt.Printf("地址:%x,对应的值为:%d/n",b,*b)
 }

image.png


指针的零值
代码语言:javascript
复制
   var b *int
   fmt.Println(*b)

image.png

指针b执行的地址 是nil,这个时候通过*b去取值,会发生错误如上图,那么我们正确的操作应该怎么办?

代码语言:javascript
复制
package main

import "fmt"

func main(){
   var b *int
   if(b==nil){
       fmt.Println("b是一个空指针")
   }else{
       fmt.Println(*b)
   }
 }

image.png


解引用
代码语言:javascript
复制
package main  
import (  
    "fmt"
)

func main() {  
    b := 255
    a := &b
    fmt.Println(a)
    fmt.Println(*a)
}

image.png

怎么通过指针修改b的值呢?

代码语言:javascript
复制
package main

import "fmt"

func main(){
    b := 255
    a := &b
    fmt.Println(a)
    fmt.Println(*a)
    *a += 5
    fmt.Println(b)
 }

image.png


不用向数组传递数组的指针,应该使用切片
代码语言:javascript
复制
import "fmt"

func main(){
   array := [3]int{1,2,3}
   change(&array)
   fmt.Println(array)
 }

func change(array *[3]int){
    array[1] = 10
}

image.png

注意array[1] = 10,为什么不写成 array[1] = 10? 答:a[x] 是 (a)[x],当然

我们看一种更加优雅的写法

代码语言:javascript
复制
import "fmt"
func main(){
   array := [3]int{1,2,3}
   change(array[:])
   fmt.Println(array)
 }
func change(array []int){
    array[1] = 10
}

image.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是指针?
  • 指针的零值
  • 解引用
  • 不用向数组传递数组的指针,应该使用切片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档