Golang-指针(pointer)

这篇具有很好参考价值的文章主要介绍了Golang-指针(pointer)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.概念:

指针:指向内存地址的变量,指针用来存储变量的内存地址

Go 语言定义变量必须声明数据类型,因为不同数据类型的数据占用不同的存储空间,导致内存地址分配大小各不相同,所有指针只能存放同一类型变量的内存地址。

指针分为两种:类型指针和切片指针

类型指针允许对数据进行修改,直接使用指针传递数据,无须复制数据,但类型指针不能进行偏移和运算。

切片指针是切片类型的指针,它包含起始元素的原始指针、元素数量和容量

  • 指针:也称为指针变量,即用来存放内存地址的变量,一般情况下,内存地址的数据格式以0xcXXXXXXX表示,如0xc0000180a8或0xc0000ac058等
    • 指针是一个变量,也有自己的内存地址,它存放的内存地址是另一个变量的内存地址
  • 指针类型:是指针存放的内存地址的大小,比如指针a 定义为 int 类型,它只能存放整型变量的内存地址,所以在使用指针的时候必须声明指针类型,确保指针只能存放一种数据类型
  • 指针赋值:将某个变量的内存地址赋值给指针,在某个变量前面使用取地址操作符“ & ”即可获取变量的内存地址
  • 指针取值:从指针变量中通过某个变量的内存地址获取对应的数值,只需在指针变量前面使用取值操作符“ * ”即可

2.指针定义与空指针

语法格式

var name *type

name 代表指针变量名

type 是指针变量的数据类型,如数字、字符串、切片等Go语言内置的数据类型

Go 语言的空值用 nil 表示

空指针:指针为空值

3.指针赋值与取值

在Go语言编程中,所有变量先定义后使用

// 定义一个 int 类型的变量 name 并赋值 200
var name int = 200
// 定义一个 int 类型的指针
var ptr *int
// 指针赋值,将 name 的内存地址赋值给 ptr,通过取地址符“ & ”
ptr = &name
// 指针取值,在 ptr 前面使用 “ * ” 获取 name 的值
name1 := *ptr

/*
    & 取出内存地址
    * 根据内存地址取出对应的数值
*/

4.切片指针

切片是一种比较特殊的数据结构,便于使用和管理数据集合

切片是围绕动态数组的概念构建的,可以按需自动增长和缩小

切片可以理解为动态数组,并根据切片里的元素自动调整切片长度

Go 语言的切片指针是以切片表示的,切片的每个元素只能存放内存地址

切片指针的语法定义如下:

// 定义方式一
var name []*type

// 定义方式二
name := []*type{}

name 代表指针变量名

type 是指针变量的数据类型,如数字、字符串等 Go 语言内置的数据类型

切片指针可以将多个变量的内存地址存放在切片中,这样方便管理多个变量

  • 切片指针定义后,如果没有设置初始值,默认为空,由于切片是动态数组,其数据长度能自动调整,Go 语言不会分配内存地址,因此无法通过取地址操作符 “ & ”获取切片指针的内存地址

5.指针的指针

指针的指针:是一个指针变量指向另一个指针变量,另一个指针变量指向某个变量

语法格式:

// 定义指针的指针
var name **type

// 从指针的指针获取某个变量的值
v := **name

name 代表指针变量名,使用两个取值操作符 “ * ”定义为指针的指针

type 是指针变量的数据类型,如数字、字符串、切片等Go 语言内置的数据类型

v 是从指针的指针获取某个变量的值,必须使用两个取值操作符 “ * ”实现文章来源地址https://www.toymoban.com/news/detail-426083.html

到了这里,关于Golang-指针(pointer)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言指针操作(六)指向函数的指针

    指向函数的指针详解,以及如何使用指向函数的指针变量做函数参数 指向函数的指针作为函数参数,是 C 语言实际应用中的一个比较深入的部分。 目录 一、什么是函数的指针 二、用函数指着变量调用函数 2.1举例说明 三、怎样定义和使用指向函数的指针变量 3.1定义指向函数

    2024年02月05日
    浏览(51)
  • 【C/C++】 常量指针,指针常量、指向常量的常指针详解

    指针就是指向变量在内存中的地址 数据是存放在内存中的,每一个变量都有一个内存地址,假设是一个int类型变量 a ,占4个字节的内存区,那么在内存中如果是小端方式存储,我们创建指针p,把a的地址赋值给 p ,就是把a的首地址0x1100赋值给指针 p ,这个时候p的值就是变量

    2024年02月13日
    浏览(42)
  • 8.5 【C语言】指向函数的指针

    每次调用函数时都从该地址入口开始执行此段函数代码。函数名代表函数的起始地址。 例8.22 用函数求整数a和b中的大者 解题思路:在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。 (2)通过指针变量调用它所指向的函数 类型名(

    2024年02月11日
    浏览(30)
  • 指向未来: 量子纠缠的本质是一个指针

    量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也仍然互相依赖. 在探讨量子纠缠之前, 我们先阐述量子比特 (Qubit)的基本概念. 位 (Bit) 是信息的基本单位, 可以处于 0 或 1 的状态. 而量子比特可以同时处

    2024年01月19日
    浏览(82)
  • 不允许指针指向不完整的类类型

    问题原因 1:没有包含对应结构体的头文件 解决办法 1:直接添加相对应的头文件 问题原因 2:对应的结构体定义写在了C/CPP文件里 解决办法 2:将结构体定义写在对应的头文件中

    2024年02月07日
    浏览(36)
  • 【C/C++】父类指针指向子类对象 | 隐藏

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c++系列专栏:C/C++零基础到精通 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ c语言内容💖:

    2024年02月11日
    浏览(41)
  • 不要轻易定义指向std::vector中的元素的指针

    类应该是被封装的,类的用户通过接口使用类提供的功能,而不必关心类的内部如何实现。然而,C++标准库容器 std::vector 的实现渗透到了接口中来。对于以下代码: 我们初始化了一个有3个int元素的vector,定义了一个int 指针p,指向v[1] , 打印 *p 以及v[1] 的值。 然后向 v 中pu

    2024年02月05日
    浏览(39)
  • Go invalid memory address or nil pointer dereference错误 空指针问题

    Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference,这种是内存地址错误。 首先我们要了解 指针,指针地址 在 Go 中 * 代表取指针地址中存的值, 代表取一个值的地址 对于指针,我们一定要明白指针储存的是一个值的地址,但本身这个指针也需

    2024年02月05日
    浏览(55)
  • 表达式必须包含指向对象的指针类型,但他具有“int“?

       xdm,今天在写逆序函数的时候遇到了这样一个问题——表达式必须包含指向对象的指针类型,但他具有\\\"int\\\"?原来问题出在这里...    首先来看看题目   就在第三个函数的时候,我遇到了以下这样的问题   一个简单的逆序函数逻辑没出错,那一定是哪里输入错误,通过警告

    2024年02月16日
    浏览(43)
  • C++野指针(Wild Pointers)是什么?如何避免?如何正确地使用new和delete?

    C++野指针(Wild Pointers)是什么?如何避免? C++野指针(Wild Pointers)指的是那些指向无效内存地址的指针。野指针通常是由于内存管理不当导致的,比如未初始化的指针、指向已释放内存的指针、越界访问导致的指针等。野指针是非常危险的,因为它们可能引发未定义行为,

    2024年02月20日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包