首页 > 其他分享 >【入门】Go语言指针详解

【入门】Go语言指针详解

时间:2023-04-02 18:22:57浏览次数:25  
标签:变量 int var 详解 Go 内存地址 指针

目录

一、指针介绍

1.1 什么是指针?

  • 指针是一种存储变量内存地址的变量。
  • Go 语言中的指针与 C/C++ 中的指针类似,但是 Go 语言中的指针不能进行指针运算,也不能进行指针类型转换。

1.2 指针有什么用?

在Go语言中,指针是一种特殊的变量,它存储了一个变量的内存地址。通过指针,我们可以直接访问和修改变量的值,而不需要拷贝变量本身,这样可以提高程序的效率。指针在Go语言中有以下几个作用:

  • 传递变量的地址:指针可以作为函数参数,将变量的地址传递给函数,这样函数就可以直接修改变量的值。

  • 动态分配内存:通过指针可以在运行时动态分配内存,这样程序就可以根据需要动态地创建和销毁变量。

  • 访问复杂数据结构:指针可以用于访问复杂的数据结构,如链表、树等,通过指针可以方便地遍历和修改这些数据结构。

  • 函数返回值:指针可以作为函数的返回值,这样函数就可以返回一个指向变量的指针,而不是变量本身,这样可以避免变量拷贝和内存分配的开销。

二、指针的定义

语法:

var 指针变量名称 *指针类型

如下案例:通过指针修改变量的值

package main

import "fmt"

func main() {
	var a int = 100
	var p *int = &a
	// 通过指针修改变量的值
	*p = 666

	fmt.Printf("a变量的值:%v\ta变量的内存地址:%v", a, p)
}

代码输出内容:

a变量的值:666	a变量的内存地址:0xc000018098

三、指针操作注意事项

3.1 空指针

定义完成指针变量后,没有声明任何内存地址,那么就是空指针。

	var p *int
	fmt.Println(p)

3.2 操作没有合法指向的内存

没有指向内存地址,直接操作

	var p *int
	*p = 666 // 没有指向内存地址,直接操作
	fmt.Println(p)

3.3 new()函数使用

开辟数据类型对应的内存空间,返回值为数据类型指针

	var p *int
	p = new(int) //int占用4字节,也就是开辟4字节的内存空间,给p指针变量
	*p = 666
	fmt.Println(p)

标签:变量,int,var,详解,Go,内存地址,指针
From: https://www.cnblogs.com/qinziteng/p/17280926.html

相关文章

  • Django项目的第1个应用
    1.在Django项目中,每一个应用都是一个python包,都用同一个技术规范。Django自带工具startapp,可以自动生成应用的基础目录结构。如:diango-daminstartapppollsapp2.运行后会创建一个pollsapp目录,不同之处是多一个空的views.py文件,存放视图。3.实现网页能看到视图:一是要有内容:在......
  • 走进“指针”的大门
    1、前言   指针是C语言的“精髓”,学C语言不学指针等同于C语言白学,这话语说的虽然直白,但是却真正体现出了指针在C语言中的重要性。   要想成为C语言方面的大佬,那你必须玩转指针,指针在C语言中的重要性不言而喻,但它也是我们入门C语言的拦路虎,很多大学的非计算机专业对C语......
  • 【入门】Go语言结构体(struct)详解
    目录一、结构体介绍1.1什么是结构体?二、结构体定义与初始化2.1结构体定义2.2结构体初始化三、拓展3.1结构体与数组3.2结构体与切片3.3结构体与map3.4结构体作为函数参数一、结构体介绍1.1什么是结构体?结构体是一种自定义的数据类型,用于表示一组相关的数据字段。结构......
  • Golang 需要至少 5 个操作系统线程
    Golang需要至少5个操作系统线程主线程:Golang代码执行的入口点,负责初始化程序,并启动其他Goroutine。垃圾回收器线程:Golang内置了垃圾回收器,使用专门的线程来执行垃圾回收操作,回收不再使用的内存空间。CPU核心数个系统线程:每个核心需要一个系统线程来支持并发任务的执行......
  • golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行
    设置处理的器的数量为1是什么将处理器设置为1就是可以控制线程数呢?在GMP模型中,P与M一对一的挂载形式,通过设定GOMAXPROCS变量就能控制并行线程数。演示案例packagemainimport( "fmt" "runtime" "runtime/debug" "runtime/pprof" "time")funcmain()......
  • Go 语言数组和切片的区别
    原文链接:Go语言数组和切片的区别在Go语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。另外,这个问题在面试中也经常会被问到,属于入门级题目,看过文章之后,相信你会有一个很好的答案。数组数组是同一种数据类型元素的集合,数组在......
  • django直线支付宝支付接口
    1.创建Django项目首先,在命令行中使用以下命令创建一个新的Django项目:django-adminstartprojectproject_name2.安装PythonSDK然后,下载并安装支付宝PythonSDK。可以使用pip命令进行安装:pipinstallalipay-sdk-python3.配置支付宝参数配置支付宝参数在settings.py文件......
  • Go语言入门2(流程控制,string)
    流程控制选择结构(分支语句)​ 因为switch只能匹配固定值,推荐使用if-else做条件筛选if-else判断packagemainimport"fmt"funcmain(){ vartmpAint fmt.Scanln(&tmpA) iftmpA>=90{ fmt.Println("tmpA>=90") }elseiftmpA<90&&tmpA>......
  • FTP状态码详解
    目录详细分解1xx–肯定的初步答复110120125150原因2xx–肯定的完成答复202211212213214215220221225226原因227230原因2502573xx–肯定的中间答复331原因3323504xx–瞬态否定的完成答复421425426原因4504514525xx–永久性否定的完成答复500501502503504530原因532550原......
  • Python异常 ValueError的问题详解
    导读这篇文章主要介绍了Python异常ValueError的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教Python异常ValueErrorValueError:invalidliteralforint()withbase10:'*'试图将一个与数字无关的类型转化为整数,会抛出该异常。......