zoukankan      html  css  js  c++  java
  • Go语言中的值类型和引用类型

    一、值类型和引用类型
    值类型:int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中。当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝。可以通过 &i 获取变量 i 的内存地址。  值拷贝

    引用类型:特指slice、map、channel这三种预定义类型。引用类型拥有更复杂的存储结构:(1)分配内存 (2)初始化一系列属性等一个引用类型的变量r1存储的是r1的值所在的内存地址(数字),或内存地址中第一个字所在的位置,这个内存地址被称之为指针,这个指针实际上也被存在另外的某一个字中。  

    两者的主要区别:拷贝操作和函数传参。

    二、实例详解值类型和引用类型
    数组array和切片slice的实例:

    定义了一个数组a,它是值类型,复制给b是copy,当b发生变化后a并不会发生任何变化,程序的执行结果如下所示:

    //由 main 函数作为程序入口点启动
    func main() {
    	a :=[5]int{1,2,3,4,5}
    	b := a
    	b[2] = 8
    	fmt.Println(a, b)
    }
    

    切片则不然,如下代码所示:

    //由 main 函数作为程序入口点启动
    func main() {
    	a :=[]int{1,2,3,4,5}
    	b := a
    	b[2] = 8
    	fmt.Println(a, b)
    }

    程序输出结果:a和b本质上指向同一个底层数组。  切片的底层数据结构其实是一个指针、len、cap。



    原文:https://blog.csdn.net/li_101357/article/details/80199636

  • 相关阅读:
    [USACO][最短路]Cow Tours
    [USACO][枚举]Preface Numbering
    [USACO][枚举]Hamming Code
    [USACO][枚举]Healthy Holsteins
    [USACO][DAG上的动态规划]Sorting A Three-Valued Sequence
    [USACO][暴力]The Castle
    [USACO][枚举]Ski Course Design
    运算符重载must take either zero or one argument错误
    关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种
    鼠标滚轮事件封装
  • 原文地址:https://www.cnblogs.com/derekchen/p/11216314.html
Copyright © 2011-2022 走看看