Go基础编程 - 06 - 指针

news2024/11/8 14:18:56

指针

  • 1.1 指针类型、指针地址
  • 1.2 指针取值(*)
  • 1.3. 空指针
  • 1.4. 语法糖
  • 1.5. new()、make()

上一篇:数组与切片

下一篇:map 及其约束


  • Go不能进行偏移或运算,是安全指针。
  • 取址符(&),获取地址;取值符(*),根据地址获取值。

1.1 指针类型、指针地址

Go语言中的值类型(int、float、string、bool、array、struct)都有对应的指针类型;如 *int、*string 等。

获取变量指针地址:&

ptr := &v
其中,v 为变量(类型T);ptr 为用于接收地址的变量(类型为*T),称作 T 的指针类型。

示例:

    var a int = 10
    b := &a
    fmt.Printf("b:%v  Type:%T, b-ptr:%d", b, b, &b)

指针

1.2 指针取值(*)

& 取出地址,* 根据地址取出地址指向的值。

    var a int = 10
    b := &a
    fmt.Printf("%d  %T", *b, *b)

    // 指针传值
    f1 := func(a *int) {
        *a = 100
    }

    f1(&a)
    fmt.Println(a)

小结:

  1. 对变量取地址(&)操作,可以获得这个变量的指针变量。
  2. 指针变量的值是指针地址。
  3. 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。

1.3. 空指针

当一个指针被定义后未赋值,它的值为nil。

    var s *string
   
    // 空指针判断
    if s == nil {
        fmt.Println("s is nil")
    }

1.4. 语法糖

使用 & 对结构体进行取址操作,相当于 new()。

	type Student struct {
	    Name string
	    Age  int
	}   
	
	stu := &Student{}
	stu.Name = "小明"
	(*stu).Age = 6
	
	fmt.Printf("%#v\n", stu)

Go语法糖:会适时地为我们进行自动地转译,在stu之上,之所以我们可以通过stu.Name = "小明"设置名字,是因为 Go语言把它自动转译为了(*stu).Name = "小明"

1.5. new()、make()

  1. 二者都是用来做内存分配。
  2. new,(不常用)用于类型的内存分配,并初始化类型零值,返回的是指向类型零值的指针。
  3. make,只用于slice、map以及channel的初始化,返回这三个引用类型本身;
    var s *string                   // 空指针nil,未分配内存(无法取值)
    //fmt.Printf("%p\n", *s)        // invalid memory address or nil pointer dereference

    // new
    s1 := new(string)               // 初始化*string,值为空字符串
    fmt.Printf("%v  %s", s, *s1)

    // makes
    var m map[int]string
    // m[0] = "A"	                // 未初始化分配内存,产生panic: assignment to entry in nil map
    m = make(map[int]string, 10)    // 分配内存,并定义长度
    m[1] = "B"
    fmt.Println(m)

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

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

相关文章

嵌套查询(二)-谓词EXISTS实现嵌套查询

一、EXISTS谓词 1、作用:用于判断一个子查询的结果是否为空 2、使用语法: 【NOT】EXISTS(子查询) 语义:如果子查询的查询结果不为空,则EXISTS为真,否则为假 二、举例 1、举例1&#xff1a…

有没有硅基生命?AGI在哪里?

摘要 随着科技的飞速发展,人工智能(AI)和生命科学的探索逐渐成为人们关注的焦点。其中,关于硅基生命的可能性与AGI(Artificial General Intelligence,即人工通用智能)的实现,更是引…

函数式开发接口( Consumer、Function)在实际开发中的应用场景

之前有个扫码下载文件需求,由于要同时进行记录下载人的记录。一开始用的是异步进行日志记录。发现有的用户扫码下载了一次文件,日志记录了三条。这种很容易联想到是因为网络抖动造成的。 问题代码 由于日志记录是异步的,文件下载需要时间。同…

场外期权能不能开户?场外期权在哪里开?

今天带你了解场外期权能不能开户?场外期权在哪里开?近年来,场外期权交易在金融市场上逐渐盛行起来。有许多人对于场外期权的开户问题感到困惑。 场外期权能不能开户? 资质要求: 个人投资者需要具备一定的金融知识和投…

Excel根据身份证号提取信息

概览 本篇文章主要对根据身份证号码提取出生年月日、年龄、性别、退休年龄这三项进行讲解。 一. 提取出生年月日 公式:TEXT(MID(B2,7,8),“0000-00-00”) MID(B2,7,8):表示从单元格 B2 中的字符串(这里是身份证号)&#xff0c…

SolarONE:新一代开放灵活高效的车载网络仿真测试软件

在当前汽车设计中,车载总线系统扮演着至关重要的角色,它连接了车辆内部的各种电子控制单元(ECU),实现了数据的传输与交换。为了更好地理解和优化车载总线系统,软件工具的使用变得至关重要。 本文将介绍一款…

二十三、生成帮助文档

二十一、Java工具类的创建 二十二、Jar包制作及使用 这一篇开始学习如何生成帮助文档。为什么要学习生成帮助文档? 1、工具类已经制作好了,Java工具类的创建的类是一个.java文件,编译后成.class文件看不懂,所以需要对应的帮助文档…

光伏电站阵列式冲击波声压光伏驱鸟器

光伏电站内鸟群的聚集可不是一件好事,鸟类排泄物,因其粘度大、具有腐蚀性的特点,一旦堆积在太阳能板上,会严重影响光伏电站的发电效率。长期积累的鸟粪不仅难以清洗,还可能引发组件的热斑效应,严重时甚至可…

大模型推理优化

什么是大模型推理 **大模型推理其实就是大模型如何输出,怎么输出,输出什么的过程。**在人工智能的基础模型下,各种推理任务涵盖了多个领域,包括常识推理、数学推理、逻辑推理、因果推理、视觉推理、听觉推理、多模态推理和代理推…

【SpringBoot+Vue】后端代码学习记录——登录功能开发

参考资料 https://www.cnblogs.com/three-fighter/p/14332288.html 零、前端开发 略。之前有过。 一、后端开发 1、统一结果封装 创建了一个 Result 类,用于异步统一返回的结果封装。一般来说,结果里面有几个要素必要的 是否成功,可用 c…

哪个牌子的儿童护眼灯好?五款平价护眼台灯推荐

护眼台灯在近年来成为家长和长时间使用电子设备人群关注的家电/学生产品。对于家中有孩子或经常面对电子屏幕的人士来说,很多人可能已经对这类产品有所了解并进行了购买。然而,部分家长对护眼台灯的认识还不够深入,因此尚未为孩子选择一款合适…

怎么写自动注册苹果ID的工具,会用到哪些源代码?

在数字化时代,苹果ID成为了连接苹果生态系统中各项服务的关键桥梁,然而,手动注册苹果ID的过程往往繁琐且耗时,因此,开发一款能够自动注册苹果ID的工具成为了许多开发者的追求。 本文将科普如何编写这样的工具&#xf…

每日一练:攻防世界:Misc文件类型

给了一个txt文本文件,因为题目是文件类型,我先开始一直在想关于文件头的知识。 这串数据看着像十六进制数据,我就直接把他转ASCII了 反转一下就是base64,因为base64没有_,所以去掉46ESAB_,base64解码Hex试…

【游戏】一款纯web集前后端为一体的沙盒游戏框架介绍

1.biomes-game是什么? 一款基于MIT协议开源沙盒 MMORPG。游戏中可建造、采集、玩迷你游戏等等,所有操作均可通过浏览器完成。它主要使用React框架,前后端用 Typescript 和 WebAssembly 编写。 2.如何本地体验? 配置:…

简约不简单,建筑装饰演绎现代美学

走在城市的大街小巷,你是否曾被那些独特而精美的建筑装饰所吸引?每一栋建筑都像是艺术家的杰作,通过精美的装饰诉说着它的故事。 我们的建筑装饰,不仅注重外在的美观,更追求内在的品质。从古典的雕花到现代的简约线条&…

干货下载 |《数据治理:数据中台建设与能力提升策略》

在当今这个信息爆炸的时代,数据已经成为企业最宝贵的资产之一。数据不仅能帮助企业洞察市场趋势,还能优化业务流程,提升运营效率,进而在激烈的市场竞争中占据优势地位。然而,如何有效地管理和利用这些数据,…

Qt篇——-1: error: fatal error: no input files问题解决

有时在pro或pri中引用的文件被删除或重命名后,会导致pro或pri文件中自动出现两个连续的//,这将导致我们编译时提示:-1: error: fatal error: no input files。 这是因为qmake 语法里每增加一个源文件或一个配置用一个斜杠结束&#x…

高速直线导轨驱动与控制,精准稳定的运动核心元件

直线导轨在工业生产中,精度和稳定性是至关重要的。而在各种机械设备中,高精度直线导轨是提高设备运动控制精度和平稳性的核心部件,当我们考虑高速运动时,直线导轨的精度和稳定性是非常重要的因素。 直线导轨系统中如何确保高速运动…

计算机网络 —— 运输层(四次挥手)

计算机网络 —— 运输层(四次挥手) 四次挥手客户端到服务器的关闭第一次挥手第二次挥手 服务器到客户端连接的关闭第三次挥手第四次挥手 等待时间的必要性 我们今天来看TCP协议的四次挥手: 四次挥手 TCP的四次挥手(Four-Way Han…

TikTok网红营销指南 | 怎么找到TikTok网红并进行合作?

如果你打算在tiktok上进行营销,忽略与tiktok网红合作无异于错失良机,时尚博主Sophia仅用一条30秒的视频展示了自己从一家新兴品牌购买的连衣裙,视频迅速获得了数百万的点赞和评论,也让该品牌的销量翻了好几倍。 这种与网红合作的策…