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 = 100fmt.Println("num =", num) 		//  num = 100// 指针类型:var ptr *int = &numfmt.Println("num的地址是:", &num)  //  num的地址是: 0xc04205a080fmt.Println("ptr存储的是num的地址:", ptr)  //  ptr存储的是num的地址: 0xc04205a08fmt.Println("ptr指针指向的变量内容:", *ptr)  //  ptr指针指向的变量内容: 100- 解释var ptr *int = *num
1. ptr 是一个指针变量
2. ptr 的类型是*int 
3. ptr 本身的值&num

指针内存图

在这里插入图片描述

练习题

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16.字符连接

#include<stdio.h> #include <cstring> int main(){char s1[44];char s2[33];scanf("%s",s1);scanf("%s",s2);strcat(s1,s2) ;printf("连接两个字符为&#xff1a;%s ",s1); return 0;}

verilog——移位寄存器

在Verilog中&#xff0c;你可以使用移位寄存器来实现数据的移位操作。移位寄存器是一种常用的数字电路&#xff0c;用于将数据向左或向右移动一个或多个位置。这在数字信号处理、通信系统和其他应用中非常有用。以下是一个使用Verilog实现的简单移位寄存器的示例&#xff1a; m…

Docker实现挂载的N种方式

目录 docker挂载实现挂载的方式绑定挂载数据卷&#xff08;Volume&#xff09;挂载DockerFile 定义数据卷临时文件系统&#xff08;tmpfs&#xff09;挂载挂载 docker挂载 默认情况下&#xff0c;在Docker容器内创建的所有文件都只能在容器内部使用。容器删除后&#xff0c;数…

HashMap源码分析(一)

存储结构 说明&#xff1a;本次讲解的HashMap是jdk1.8中的实现&#xff0c;其他版本可能有差异 内部是由Node节点数组组成&#xff0c;Node节点之间又由链表或红黑树组成。 图是网上找的&#xff0c;实在不想画 属性介绍 //存储数据的数组&#xff0c;初次使用时初始化&…

基于CSP的运动想象EEG分类任务实战

基于运动想象的公开数据集&#xff1a;Data set IVa (BCI Competition III)1 数据描述参考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134224005?spm1001.2014.3001.5501 EEG 信号时频空域分析参考前文&#xff1a;https://blog.csdn.net/qq_4381153…

xdcms漏洞合集-漏洞复现

目录 xdcms v3.0.1漏洞 环境搭建 代码审计 目录总览 配置文件总览 登陆处sql注入 漏洞分析 漏洞复现 注册处sql注入漏洞 漏洞分析 漏洞复现 getshell 任意文件删除 xdcms订餐网站管理系统v1.0漏洞 简介 环境搭建 全局变量的覆盖 漏洞分析 漏洞复现 后台任意…

6个机器学习可解释性框架

1、SHAP SHapley Additive explanation (SHAP)是一种解释任何机器学习模型输出的博弈论方法。它利用博弈论中的经典Shapley值及其相关扩展将最优信贷分配与局部解释联系起来. 举例&#xff1a;基于随机森林模型的心脏病患者预测分类 数据集中每个特征对模型预测的贡献由Shap…

Android技术-修改SO导出符号

背景 经常在使用第三方SDK的时候会莫名其妙报错&#xff0c;其中最常见的一种就是SO符号冲突&#xff0c;比如libA.so静态链接了libC.a,而libB.so动态链接了libC.so。这样便会导致符号冲突。又或者在使用不同版本的动态库&#xff0c;也会造成符号冲突。 报错案例 案例1 DEB…

PDF Expert for mac(苹果电脑专业pdf编辑器)兼容12系统

PDF Expert是macOS平台上的一款优秀的PDF阅读和编辑工具&#xff0c;由Readdle公司开发。它不仅拥有方便、易用的界面&#xff0c;还具备诸多功能&#xff0c;比如编辑PDF文件、添加批注、填写表格、签署文件、合并文档等。安装:PDF Expert for Mac(PDF编辑阅读转换器)v3.5.2中…

探讨m6调控因子与人类癌症之间的因果关系,纯生信也能轻松上5+

今天给同学们分享一篇生信文章“m6A Regulators Is Differently Expressed and Correlated With Immune Response of Esophageal Cancer”&#xff0c;这篇文章发表在Front Cell Dev Biol期刊上&#xff0c;影响因子为5.5。 结果解读&#xff1a; m6A调控因子在基因组中的异常与…

【 毕设项目源码推荐 javaweb 项目】 基于 springboot+vue 的图书个性化推荐系统的设计与实现(springboot003)

简介 :::warning 【 毕设项目源码推荐 javaweb 项目】 基于 springbootvue 的图书个性化推荐系统的设计与实现适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负…

TripleDES golang/python/ts 实现方式

2. 实现方式 2.1. react-ts function encrypt(text){import CryptoJS from crypto-jsconst key "saxbj%2xas"const text "liyuan"const iv "01234567"const result CryptoJS.TripleDES.encrypt(text, CryptoJS.enc.Utf8.parse(key), {mode:…

css怎样进行预处理

CSS的预处理原理是在原有CSS的语法基础上&#xff0c;添加了额外的特性&#xff0c;如变量、嵌套规则、mixin等&#xff0c;可以更方便地编写和维护样式表。常用的CSS预处理器包括Less、Sass和Stylus&#xff0c;以下是它们的使用方法&#xff1a; Less 安装Less&#xff1a;…

【测开求职】面试题:计算机网络 精简版整理

本篇文章整理的是在秋招过程中遇到的计算机网络高频面试题,应付部分中小厂的测试开发工程师面试完全没有问题,如果时间充足的话,建议再看一下笔者的另外一篇文章:【测开求职】面试题:计算机网络 详细版整理,会让你对整个计算机网络有足够全面深刻的理解,亲测应付各个大厂…

QTcpServer 封装

来一段自封装&#xff0c;在用的QTcpserver,不用去找boost,或是poco,libevent……&#xff0c;也不用去从底层winsocket封装开始&#xff0c;真不用去那么折腾&#xff0c;放着QT自带的不用&#xff0c;那不仅是可惜&#xff0c;是辜负了QT团队的一片苦心…… #pragma once #i…

react:封装组件

封装 /components/Pagination.tsx import React from react import { Pagination } from antdconst PaginationWarp ({ total, paramsInfo, setParamsInfo }) > {return (<Paginationtotal{total}current{paramsInfo.page}showSizeChangershowQuickJumperdefaultPageSi…

15.数组逆置【不是为啥我第四行不太对呢?】

#include<stdio.h>int fun(int a[4][4]){int i,j;int b[4][3];} int main(){int i,j;int a[3][4], b[4][3];for (i0;i<3;i)for(j0;j<4;j)scanf("%d",&a[i][j]);for (i0;i<3;i)for(j0;j<4;j)b[j][i]a[i][j];printf("逆置后&#xff1a;\n&…

Vite和Webpack区别

Vite和Webpack区别 Vite和Webpack都是现代前端项目的构建工具&#xff0c;它们存在一定的差异: 打包方式的不同 Vite采用Native ES Module的方式服务源码。它不会将代码打包&#xff0c;而是利用浏览器原生支持ES module的方式&#xff0c;实现按需加载。 Webpack需要先打包…

【Linux】文件重定向以及一切皆文件

文章目录 前言一、重定向二、系统调用dup2三、重定向的使用四、一切皆文件 前言 Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入0&#xff0c; 标准输出1&#xff0c; 标准错误2&#xff0c; 0,1,2对应的物理设备一般是&#xff1a;键盘&#xff…

本地数据库迁移到云端服务器

工具迁移xtrabackup 创建云服务器——通过云服务器提供的公网地址远程连接XShell——利用迁移工具将数据库从本地迁移到云服务器 &#xff08;1&#xff09;创建云服务器 &#xff08;2&#xff09;远程连接XShell &#xff08;3&#xff09;yum安装mysql &#xff08;4&…