• var new make 创建变量的不同,以及创建指针变量


    指针:一个指针指向了一个值的内存地址。类似于变量和常量,再使用指针前你i需要声明指针。

    指针声明格式如下:

    *是取指针的值,&是取变量的指针

    var var_name *var-type           // var-type为指针类型,var_name为指针变量,*号用于指定变量是作为一个指针

     var ip *int    // 指向整型  声明指针变量

     var fp *float32   //指向浮点型

     var a int = 20  // 声明实际变量

     ip = &a  // 指针变量的存储地址

    fmt.Printf("a 变量的地址是:%x\n",&a)    // a 变量的地址是:c00000a0a8
    fmt.Printf("ip 变量存储的指针地址:%x\n",&ip)  // ip 变量存储的指针地址:c000006028
    // 使用指针访问值
    fmt.Printf("*ip 变量的值:%d\n",*ip)     // *ip 变量的值:20


    *和&有什么区别
    &是取地址符号,即取得某个变量的地址,如;&a
    *是指针运算符,可以表示一个变量是指针类型,也可以表示一个指针变量所指向的存储单元,也就是这个地址所存储的值


    空指针:当一个指针被定义后没有分配到任何变量时,他的值为nil(nil指针,也被成为i空指针)

    nil 再概念上和其他语言的null,Nine,NULL一样,都指代零值或空值,一个指针变量通常缩写为ptr

    var ptr *int

    fmt.Printf("ptr 的值为:%x\n",ptr)   // ptr 的值为:0
    // 空指针的判断
    //if (ptr != nil) // ptr 不是空指针
    //if (ptr == nil) // ptr 是空指针
     

    var new和make的区别

    var 用来声明一个变量,并指明变量的数据类型(不会分配内存)。

     new和make都是用来内存分配的。make用于内建模型(map,slice,和channel)的内存分配。new用于各种类型的内存分配

    从返回值上来说make返回的是引用类型本省;而new返回的是指向类型的指针

    定义:func new(Type) *Type

    new的主要特性:

      内建函数new用来分配内存,他的第一个参数是一个类型,不是一个值,他的返回值是一个指向新分配类型零值的指针

    自己实现new功能:

    func newInit() *int {
      var i int
      return &i
    }

    type Rect struct {
    width float64
    herght float64
    }

    func (r *Rect) size()float64{
    return r.width * r.height
    }

    func main() {
    someInt := newInit()
    fmt.Println(someInt) //
    0xc00000a0b8 打印出来是一个指针
    someInt_1 := new(int)
    fmt.Println(someInt_1) // 0xc00000a0f0 效果与这个一样
    }
    make的主要特性
    官方文档描述如下:
            内建函数make用来为slice,map或chan类型分配内存和初始化一个对象(注意只能用在这三种类型上),跟new类似,第一个参数也是一个类型
            而不是一个值,跟new不同的是,make返回类型的引用而不是指针,而返回值也依赖于具体传入的类型。
        具体说明如下:
            slice:第二个参数size指定了它的长度,它的容量和长度相同 eg:make([]int,0,10)
            Map:根据size大小来初始化分配内存,不过分配后的map长度为0,如果size被忽略了,那么会在初始化分配内存时分配一个小尺寸的内存
            Channel:管道缓冲区依据缓冲区容量被初始化。如果容量为0或者忽略容量,管道是没有缓冲区的
    总结:new的作用是初始化一个指向类型的指针(*T),make的作用是为slice,map,或chan初始化并返回切片本身
  • 相关阅读:
    Vue中this.$router.push(参数) 实现页面跳转
    vue elementui .eldialog 限制高度
    D Staircase Sequences 题解(思维)
    E Magical Ornament 题解(图论+状压dp)
    软件开发工具之五:“VisualStudio.NET部署应用程序”
    软件开发工具之二 :Power Designer
    软件开发工具之八 :Visio
    软件开发工具之九 :CVS
    软件开发工具之三:NUnit
    软件开发流程实例之一 :项目概述
  • 原文地址:https://www.cnblogs.com/ltyc/p/16058556.html
Copyright © 2020-2023  润新知