Golang 开发实战day12 - Pointer

server/2024/9/23 12:41:16/

🏆个人专栏
🤺 leetcode
🧗 Leetcode Prime
🏇 Golang20天教程
🚴‍♂️ Java问题收集园地
🌴 成长感悟
欢迎大家观看,不执着于追求顶峰,只享受探索过程

Golang 开发实战day12 - 指针

  在 Golang 中,指针是一种强大的工具,可以让我们直接操作内存中的数据。与其他编程语言相比,Golang 的指针更加轻量级,但也更灵活,这使得它在性能和开发效率之间取得了良好的平衡。

1、指针的基本概念

  指针就像一张指向内存中某个位置的地址的纸条。我们可以通过指针来访问和修改该位置的数据。

1.1 声明指针:

var p *int // 声明一个指向 int 型数据的指针

1.2 获取指针的值:

i := 10
p = &i // 将变量 i 的地址赋给指针 p
fmt.Println(*p) // 输出 10

1.3 修改指针的值:

*p = 20 // 将指针 p 指向的值修改为 20
fmt.Println(i) // 输出 20

2 示例代码

示例一

func updateName(x string) {x = "大雄"
}func main() {name := "哆啦A梦"updateName(name)fmt.Println("名字所在的内存地址:", &name)m := &namefmt.Println(m)fmt.Println(name)
}

Output:

底下就是帮助理解的结构,m是引用了name的指针,所以地址也是指向了name的地址。比较简陋,往君见谅。

    |---name---|-----m-----| |  0x001   |   0x002   ||----------|-----------|| "哆啦A梦" |   p0x001  ||----------|-----------|

示例二

type Person struct {Name stringAge  int
}func main() {person := Person{Name: "大雄", Age: 10}name := &person.Name // 获取指向 Name 字段的指针*name = "哆啦A梦"       // 修改 Name 字段的值age := &person.Age // 获取指向 Age 字段的指针*age = 12         // 修改 Age 字段的值fmt.Println(person)
}

Output:
在这里插入图片描述

3 指针的优点

  • 高效: 指针可以让我们直接操作内存中的数据,而无需进行额外的复制操作,因此效率更高。
  • 方便: 指针可以方便地传递和共享数据,而无需创建额外的副本。
  • 灵活: 指针可以让我们直接修改内存中的数据,而无需创建新的变量。

4 指针的注意事项

  • 指针不能指向不存在的数据: 确保指针指向的内存地址有效,否则会导致程序崩溃。
    不要同时使用多个指针指向同一块内存: 避免数据竞争,导致程序行为不可预料。
  • 释放不再使用的指针: 使用 defer 语句或其他方式释放不再使用的指针,避免内存泄漏。

5 指针的常见用法

  • 函数参数和返回值: 指针可以作为函数的参数和返回值,提高函数的效率和灵活性。
  • 结构体和数组: 指针可以用于访问和修改结构体和数组中的元素。
  • 内存管理: 指针可以用于手动管理内存,例如分配和释放内存空间。

http://www.ppmy.cn/server/37534.html

相关文章

专题模块项目功能说明和运行方法-02

项目集介绍 SpringbootSeries父工程 此模块中只有一个pom.xml文件,是后面所有模块的父模块,主要功能有两个:子模块管理和依赖管理。 类别必选可选基础框架jdk 17 spring-boot-starter 3.2.4spring-boot-starter-web 3.2.4spring-cloud 2023…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员(职员就职于一个职位) 3.角色 //相当于 职位(有多个职责) 权限管理基础表:权限表,用户表,角色表 问题1:…

面向对象 01:Java 面向对象相关内容

前言 记录时间 [2024-05-07] 基础篇文章简摘: Java 笔记 01:Java 概述,MarkDown 常用语法整理 Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad / JDK 安装及环境配置,编写第一个 Java 程序 Java 笔记 11…

算法精讲:选择排序

基本思想 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前端,直到所有元素排完。 排序过程 初始关键字:【3 1 5 4 2】 第一趟排序后:1【3 5 4 2】 第二趟排序后&am…

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机:centos7.9 配置:4C8G40G 1. 下安装mysql5.7 安装mysql5.7: # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

电路板第一次调试注意事项

电路板第一次调试注意事项 调板经验其他人的经验一、上电前检查1、目测检查2、电源短路检查3、连线检查4、元器件安装检查 二、通电后检测1、通电观察2、静态调试3、动态调试 调板经验 1.打开原理图 PCB,熟悉一遍。 2.拿到板,找到输入正负极&#xff0…

TypeScript学习日志-第二十天(模块解析)

模块解析 一、ES6之前的模块规范 前端模块化规范是有很多的,在es6模块化规范之前分别有一下的模块化规范 一、Commonjs 这是 NodeJs 里面的模块化规范 // 导入 require("xxx"); require("../xxx.js"); // 导出 exports.xxxxxx function() …

加索引导致表被锁的原因及处理方法

目录 为什么加索引会导致表被锁?什么情况下会被锁?要注意什么?被锁怎么处理?MySQL查询被锁的表查询被锁的库 PostgreSQL查询被锁的表查询被锁的库 Oracle查询被锁的表查询被锁的库 SQL Server查询被锁的表查询被锁的库 结语 在数据…