码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 04【保姆级】-GO语言指针


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

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

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

    • 一、指针的概念
      • 1.1 基本数据类型 && 指针类型
      • 1.2 指针的详细讲解
        • 指针内存图
        • 练习题
    • 二、 值类型和引用类型【面试题】
      • 2.1 值类型
      • 2.2 引用类型
      • 2.3值类型和引用类型的使用特点

    一、指针的概念

    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. 内存的栈区和堆区示意图:

    在这里插入图片描述

  • 相关阅读:
    文字转音频软件哪个好用?这3款文字转换音频的软件识别率很高
    【C++】构造函数与析构函数用途 ( 代码示例 - 构造函数与析构函数用途 )
    使用php实现pc端和移动端分离
    工具篇:鸿蒙DevEco Studio5.0版本下载及安装
    C++——IO流
    .net6 web api中使用SqlSugar(MySQL数据库)
    【无标题】
    Dockerfile 制作常用命令总结
    深入理解mmap--内核代码分析及驱动demo示例
    C++证明四方定理
  • 原文地址:https://blog.csdn.net/weixin_43989347/article/details/134253031
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号