首页 > 编程语言 > 详细

Go语言之数据类型(三)

时间:2021-08-22 14:27:02      阅读:7      评论:0      收藏:0      [点我收藏+]

一、值类型和引用类型

值类型就是变量直接存储值,内存通常在栈中分配;引用类型就是变量存储的是一个值,这个地址对应的空间才是真正存储数据的值,内存通常在堆上分配。在Go语言中值类型和引用类型的数据类型有以下的分类。

1、值类型 

  •  基本数据类型(int系列、float系列、bool、string)
  • 数组
  • 结构体struct

2、引用类型

  • 指针
  • slice切片
  • map
  • 管道
  • interface

...

二、指针

  指针属于引用变量,所以它存储的值就是一个内存地址,而这个地址指向的空间存的才是数据值,比如:var ptr *int = &a ,&用于获取变量的地址,如var a int,获取变量a的地址使用 &a。

package main

import "fmt"

func main() {

    // 定义声明一个基本数据类型,其本身的内存地址 &i
    var a int = 10

    // 定义声明一个指针变量
    // 1、ptr是一个指针变量
    // 2、ptr的数据类型是*int
    // 3、prt本身的内存地址是 &ptr
    var ptr *int = &a

    fmt.Printf("ptr=%v\n", ptr) // ptr=0xc000014098
    fmt.Printf("ptr的地址是%v\n", &ptr) // ptr的地址是0xc000006028
    fmt.Printf("ptr指向的值是%v\n", *ptr) // ptr指向的值是10
}

通过内存图理解:

技术分享图片

 注意事项:

  • 上图中可以通过*ptr去修改对应的a变量的值
  • 值类型都有对应的指针类型,形式如 *值类型,比如int对应的指针类型就是*int,int64对应的指针类型就是*int64

 对于下面的实例均是错误的使用方法:

package main

import "fmt"


func main() {

    // 错误的使用方法,指针存储的是内存地址,修改为var ptr *int = &a正确
    var int a = 10
    var ptr *int = a

    // 错误的使用方法,指针类型与值类型不匹配,修改为var ptr1 *int = &b正确
    var int b = 20
    var ptr1 *float32 = &b
}

 

Go语言之数据类型(三)

原文:https://www.cnblogs.com/shenjianping/p/15171297.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!