【Go语言学习】——指针

本文介绍了Go语言中的指针使用,强调指针的安全性,只能通过取址符`&`获取地址和解引用符`*`获取变量。文章还对比了`make`和`new`函数的区别:`new`用于分配基本类型的内存并返回其零值的指针,而`make`则用于分配引用类型的内存,如切片、映射和通道。通过示例展示了如何使用`new`和`make`进行内存分配,并讨论了指针作为引用类型的特点。
摘要由CSDN通过智能技术生成

指针


参考博客

go语言都是安全指针,不能够偏移和运算,只能够利用指针得到变量,和由变量得到指针,只需要记住两个操作:

& :取对应变量的地址
* 根据地址获得变量

make和new函数都是用来分配内存的,区别如下

new给基本类型(int,string)申请内存的,主要用于分配值类型,并且内存对应的值为类型零值,返回的是基本类型的指针(*string,*int)
make用来给slice,map,channel申请内存的,主要用于分配引用类型,返回值就是类型本身

package main

import "fmt"

func main() {
	//&查看变量地址
	n := 18
	p := &n
	fmt.Printf("value=%v,type=%T\n", p, p)
	//*根据地址取值
	fmt.Println(*p)
	a := 10
	b := &a
	fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0x0000ac0b0
	fmt.Printf("b:%p type:%T\n", b, b) // b:0x0000ac0b0 type:*int b存储了a的地址
	fmt.Println(&b)                    // 0xc00000d8020,b自己也开辟了空间,有自己的地址

	//指针为引用类型,声明引用类型不会开辟内存,可以用new和make函数开辟内存,值类型的在声明时就分配内存了
	//new分配内存,参数为一个类型,返回值就是这个类型的指针,不常用

	var a1 *int
	var a2 = new(int)
	fmt.Println(a1, a2) //a1为空,a2有地址
	fmt.Println(*a2)    //默认为零值
	*a2 = 100
	fmt.Println(*a2) //修改后的值

	//make只作用于slice、map以及chan的内存创建,返回这三个类型本身,而不是指针了
	c := make(map[string]int, 10)
	c["卡卡"] = 100
	fmt.Println(c)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值