(八)golang--复杂类型之指针

xiximayou 2019-11-10 原文

(八)golang–复杂类型之指针

首先我们要明确:
(1)基本数据类型:变量存的就是值,也叫值类型;

(2)获取变量的地址,用&,例如var num int,获取num的地址:#

(3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = #

(4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值;

package main

import (
    "fmt"
)

func main() {
    var num int = 1
    var ptr *int = &num
    fmt.Println("num的地址是:", &num)
    fmt.Println("ptr的值是:", ptr)
    fmt.Println("ptr的地址是:", &ptr)
}

 

ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值:

package main

import (
    "fmt"
)

func main() {
    var num int = 1
    var ptr *int
    fmt.Println("num的值是:", num)
    ptr = &num
    *ptr = 10
    fmt.Println("num的值是:", num)
}

 

 我们还可以通过切换指针的值来改变不同变量的值:注意指针类型与变量类型之间要匹配。

package main

import (
    "fmt"
)

func main() {
    var num1 int = 1
    var num2 int = 2
    var ptr *int
    fmt.Println("num1的值是:", num1)
    fmt.Println("num2的值是:", num2)
    ptr = &num1
    *ptr = 10
    ptr = &num2
    *ptr = 20
    fmt.Println("num1的值是:", num1)
    fmt.Println("num2的值是:", num2)
}

 

 指针使用细节:
(1)值类型,都有对应的指针,形式为*数据类型,比如int对应的指针就是*int,float32对应的指针就是*float;

(2)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

 

值类型和引用类型:

(1)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;

(2)引用类型:指针、slice切片、map、管道channel、interface等;

值类型和引用类型的区别:
(1)值类型,变量直接存储,内存通常在中分配;

(2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就是一个垃圾,由GC来回收;

 

 

发表于
2019-11-10 17:50 西西嘛呦 阅读() 评论() 编辑 收藏

 

版权声明:本文为xiximayou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiximayou/p/11831091.html

(八)golang--复杂类型之指针的更多相关文章

随机推荐

  1. thinkphp3.22 多项目配置

    1.index.php if(version_compare(PHP_VERSION,\'5.3.0\',\' […]...

  2. MySql基础架构以及SQL语句执行流程

    01. mysql基础架构 SQL语句是如何执行的 学习一下mysql的基础架构,从一条sql语句是如何执行的 […]...

  3. ouc_software第一次作业:OUC二手物品交易

    一、前言 1.项目名称:ouc二手物品交易 2.项目简介     (1)创办一个网上校内二手物品交易平台,供校 […]...

  4. Spring改变版本号命名规则:此举对非英语国家很友好

    天下苦Spring Cloud版本命名久矣 要想改变命运,首先改变自己。本文已被 https://www.yo […]...

  5. 记事本陈列-历届数学建模大赛优秀论文(含国赛、美赛、研赛)目录

    卷 bigdata 的文件夹 PATH 列表卷序列号为 2089-3679E:.│ 1.txt│ └─优秀论文 […]...

  6. Oracle 数据库视图与基表的关系

    本文转载自:http://www.linuxidc.com/Linux/2015-03/115165.htm […]...

  7. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些 […]...

  8. A*启发式搜索

    A*启发式搜索 其实是两种搜索方法的合成( A*搜索算法 + 启发式搜索),但要真正理解A*搜索算法,还是得先 […]...

展开目录

目录导航