首页 > 其他分享 >Go 语言指针

Go 语言指针

时间:2023-08-14 19:33:05浏览次数:27  
标签:语言 int fmt var Printf Go 变量 指针

变量是一种使用方便的占位符,用于引用计算机内存地址。

Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。

package main

import "fmt"

func main() {
var a int = 10

fmt.Printf("变量的地址: %x\n", &a )
}

什么是指针

一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址。

针声明格式

var ip *int /* 指向整型*/
var fp *float32 /* 指向浮点型 */

 

如何使用指针

指针使用流程:

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

package main

import "fmt"

func main() {
var a int= 20 /* 声明实际变量 */
var ip *int /* 声明指针变量 */

ip = &a /* 指针变量的存储地址 */

fmt.Printf("a 变量的地址是: %x\n", &a )

/* 指针变量的存储地址 */
fmt.Printf("ip 变量的存储地址: %x\n", ip )

/* 使用指针访问值 */
fmt.Printf("*ip 变量的值: %d\n", *ip )
}

Go 语言指针数组

需要保存数组,需要使用到指针

package main

import "fmt"

const MAX int = 3

func main() {
a := []int{10,100,200}
var i int
var ptr [MAX]*int

for i = 0; i < MAX; i++ {
ptr[i] = &a[i] /* 整数地址赋值给指针数组 */
}

for i = 0; i < MAX; i++ {
fmt.Printf("a[%d] = %d\n", i,*ptr[i] )
}
}

Go 语言指向指针的指针

格式

var ptr **int

案例

package main

import "fmt"

func main() {

var a int
var ptr *int
var pptr **int

a = 3000

/* 指针 ptr 地址 */
ptr = &a

/* 指向指针 ptr 地址 */
pptr = &ptr

/* 获取 pptr 的值 */
fmt.Printf("变量 a = %d\n", a )
fmt.Printf("指针变量 *ptr = %d\n", *ptr )
fmt.Printf("指向指针的指针变量 **pptr = %d\n", **pptr)
}

Go 语言指针作为函数参数

允许向函数传递指针,只需要在函数定义的参数上设置为指针类型即可

package main

import "fmt"

func main() {
/* 定义局部变量 */
var a int = 100
var b int= 200

fmt.Printf("交换前 a 的值 : %d\n", a )
fmt.Printf("交换前 b 的值 : %d\n", b )

/* 调用函数用于交换值
* &a 指向 a 变量的地址
* &b 指向 b 变量的地址
*/
swap(&a, &b)

fmt.Printf("交换后 a 的值 : %d\n", a )
fmt.Printf("交换后 b 的值 : %d\n", b )
}

func swap(x *int, y *int) {
var temp int
temp = *x /* 保存 x 地址的值 */
*x = *y /* 将 y 赋值给 x */
*y = temp /* 将 temp 赋值给 y */
}

标签:语言,int,fmt,var,Printf,Go,变量,指针
From: https://www.cnblogs.com/fczlm/p/17628736.html

相关文章

  • vue3 使用 vue-i18n 配置多语言环境
    1.插件地址:VueI18n官方文档GitHub地址2.安装:在Vue之后引入vue-i18n,它会自动安装:<scriptsrc="https://unpkg.com/vue/dist/vue.js"></script><scriptsrc="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script>NPM:npminstallv......
  • 突然让做性能测试?试试RunnerGo
    当前,性能测试已经是一名软件测试工程师必须要了解,甚至熟练使用的一项技能了,在工作时可能每次发版都要跑一遍性能,跑一遍自动化。性能测试入门容易,深入则需要太多的知识量,今天这篇文章给大家带来:怎么入门性能测试,怎么样去深入性能测试。突然让做性能测试怎么办?日常工作中,项目改造......
  • R语言二手车汽车销售数据可视化探索:预处理、平滑密度图、地理空间可视化(带自测题)|附代
    全文链接:http://tecdat.cn/?p=27546原文出处:拓端数据部落公众号最近我们被客户要求撰写关于二手车汽车销售数据的研究报告,包括一些图形和统计输出。本文用爬虫采集了汽车销售数据,后来对其进行了扩展,创建这个数据集,其中包括境内的所有二手车辆或者经销商车辆条目数据。这些数据......
  • RunnerGo的相比较JMeter优势,能不能替代?
    目前在性能测试领域市场jmeter占有率是非常高的,主要原因是相对比其他性能测试工具使用更简单(开源、易扩展),功能更强大(满足多种协议的接口),但是随着研发协同的升级,平台化的性能测试工具更能高效的基于团队开展协作,比如我们今天要说的开源测试平台RunnerGo。 性能测试工具平台化优......
  • Scrum敏捷开发企业级实战课-Leangoo领歌
    ​课程简介Scrum是目前运用最为广泛的敏捷开发方法,是一个轻量级的项目管理和产品研发管理框架。这是一个两天的实训课程,面向研发管理者、项目经理、产品经理、研发团队等,旨在帮助学员全面系统地学习Scrum和敏捷开发,帮助企业快速启动敏捷实施。课程采用案例讲解+沙盘演练的方......
  • Golang 内嵌静态资源-转
    转载:https://www.mousemin.com/archives/go-embed-resource/把静态资源嵌入在程序里,原因无外乎以下几点:布署程序更简单。传统部署要么需要把静态资源和编译好的程序一起打包上传,要么使用docker和dockerfile自动化.保证程序完整性。运行中发生静态资源损坏或丢失往往会影响程......
  • 一文学会链表双指针技巧
    1.合并两个有序链表21.合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0]提示:两......
  • Golang: 使用embed内嵌资源文件-转
    转载:https://blog.kakkk.net/archives/71/embed介绍首先,embed是 go1.16才有的新特性,使用方法非常简单,通过 //go:embed指令,在打包时将文件内嵌到程序中。官方文档:https://pkg.go.dev/embed快速开始文件结构.├──go.mod├──main.go└──resources└──hello......
  • django添加装饰器进行登录角色验证
    目的:在用户请求各种接口时验证role字段是否不为user1.创建装饰器  decorators.pyfromdjango.httpimportJsonResponsefromfunctoolsimportwrapsfromutils.tokenimportget_useridfromyshop.modelsimportMyUserdefcheck_role(view_func):@wraps(view_......
  • 【校招VIP】java语言考点之Map1.7和1.8
    考点介绍:HashMap是大中小厂面试的高频考点,主要从底层结构,和线程安全等角度来进行考察,考察点比较集中,但是有一定难度分为初级和高级两种:初级一般集中在中小公司的map的key-value的可重复和可空问题;高级集中在1.7和1.8的变化,要理解变化的原因,以及并发安全性问题 一、考点题目1、......