• 04【保姆级】-GO语言指针


    之前我学过C、Java、Python语言时总结的经验:

    1. 先建立整体框架,然后再去抠细节。
    2. 先Know how,然后know why。
    3. 先做出来,然后再去一点点研究,才会事半功倍。
    4. 适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。
    5. 对于GO语言,切记遵守语法格式规则。(例如python语言、例如SpringBoot框架等)
      解释:某些知识点,就是很难了解,那么先做出来,然后继续向前学习,可能在某个时间点我们就会恍然大悟。

    一、指针的概念

    1.1 基本数据类型 && 指针类型

    1. 基本数据类型,变量存的就是值,也就是值类型。
    2. 而指针类型,指针变量存的是一个地址,这个地址对应的空间存的是值。例如:【var ptr *int = &num】

    1.2 指针的详细讲解

    1. 获取变量的地址,用&,比如:【var num int】 ,其中获取num的地址是:【&num】
    2. 获取指针类型所指向的值,使用【*】,比如【var ptr *int】,使用【*ptr】获取ptr指向的值。
    	// 基本数据类型:
    	var num int = 100
    	fmt.Println("num =", num) 		//  num = 100
    
    	// 指针类型:
    	var ptr *int = &num
    	fmt.Println("num的地址是:", &num)  //  num的地址是: 0xc04205a080
    	fmt.Println("ptr存储的是num的地址:", ptr)  //  ptr存储的是num的地址: 0xc04205a08
    	fmt.Println("ptr指针指向的变量内容:", *ptr)  //  ptr指针指向的变量内容: 100
    
    
    - 解释var ptr *int = *num
    1. ptr 是一个指针变量
    2. ptr 的类型是*int 
    3. ptr 本身的值&num
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    指针内存图

    在这里插入图片描述

    练习题

    1. 第一个是错误的,因为不能将变量直接赋值给指针。正确的是将变量的内存地址赋值给指针。
    2. 第二个是错的。是因为类型不匹配。
    3. 第三个正确。前面a的值通过指针进行了更改,后面 指针指向了b。
      在这里插入图片描述

    二、 值类型和引用类型【面试题】

    2.1 值类型

    1. 值类型:都有对应的之类类型,形式为【*数据类型】,比如int的对应指针就是【*int】
    2. 值类型包括: 基本数据类型 int系列、float系列,bool,string,数组和结构体struct

    2.2 引用类型

    引用类型:指针、slice切片、map、管道chan、interface等

    2.3值类型和引用类型的使用特点

    1. 值类型:变量直接存储值,内存通常在栈中分配。
      在这里插入图片描述

    2. 应用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(也就是值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成了一个垃圾,由GC来回收。
      在这里插入图片描述

    3. 内存的栈区和堆区示意图:

    在这里插入图片描述

  • 相关阅读:
    需求分析之道——需求分析要做什么(C系架构设计法,sishuok)
    数据结构(顺序表)
    MATLAB绘制堆叠填充图--巧用句柄
    聊聊ChatGLM-6B医疗数据微调
    SQL注入漏洞 | 数字型
    TCP三次握手和四次挥手
    个人记账本,教你使用图表格查看项目
    屏幕分辨率dpi解析(adb 调试查看)
    山东省高新技术企业认定四项得分标准解析
    ATF(TF-A)之UBSAN动态代码分析
  • 原文地址:https://blog.csdn.net/weixin_43989347/article/details/134253031