初识golang-数据类型_指针

本文深入探讨了Go语言中指针的概念与应用,包括指针的定义、使用场景及如何通过指针提高程序效率。文章通过实例展示了如何利用指针进行变量地址操作,以及在方法调用中使用指针来避免大型数据结构的复制,从而实现资源的有效利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看上一篇数组类型请点

2.指针类型

    指针这个东西啊,开始真的是让我费解,为什么需要这个东西呢,感觉根本没有用啊,但是go说:我不要你觉得,我要我觉得。然后就仔细的研究了一下,原来这个东西还是很有用的,接下来先说说go指针是什么以及指针的使用场景。

指针变量即一个值的内存地址,它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。当一个指针被定义后没有分配到任何变量时,它的默认值为 nil。

指针的使用场景:

    1.当作为方法的receiver时,如果你的方法会改变receiver时,你必须传递指针(此条最重要,然后学到这块的同学根本不知道receiver是什么,所以看到这条时并不需要纠结)。

    2.作为入参时,golang是值拷贝传递, 如果是比较大的struct(一种更高级的数据类型,就当作占用内存很大的一个参数)作为参数,那么显然拷贝一个指针比拷贝整个结构代价要小一些。

所以,到此只当作指针可以提高效率就好了(receiver的事到receiver再谈),因为传递一个几个字节的指针总比传一个超级大字符串(参数)要高效。

下面介绍指针的用法,只需要记住两点:

    1. &,取地址操作符,获取变量的地址

    2. *,定义指针变量,获取指针变量指向的变量值

package main

import "fmt"

func main() {
	var vara = 100
	var ip *int

	ip = &vara

	fmt.Println("变量vara的地址是:", ip)
	fmt.Println("变量vara的值:", *ip )
}

输出结果:

变量vara的地址是: 0xc000016058
变量vara的值: 100

指针作为参数传递:相当于浅拷贝

package main

import "fmt"

func main() {
	var a = 100
	var b = 200

	fmt.Printf("交换前 a 的值 : %d\n", a )
	fmt.Printf("交换前 b 的值 : %d\n", 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 = *y
	*y = temp
}

输出结果:

交换前 a 的值 : 100
交换前 b 的值 : 200
交换后 a 的值 : 200
交换后 b 的值 : 100

查看下一篇结构体类型请点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值