Golang入门笔记(13)—— new关键字和GO语言指针

本文详细解析了Go语言中new关键字的功能与用法,通过示例代码展示了如何使用new为不同类型的变量分配内存,并介绍了指针与地址的概念。

 关于new的本质:

        通过 new关键字 来分配内存,new 函数是实参 是一个type类型,而不是一个具体的数值。 new 函数() 返回的 对应类型的指针。

var *ptr = new(T类型)

        Java中 new 类型,就是对象,打印对象就是对象的地址,也没啥毛病,在Go这里貌似也能解释的通。Java中很多时候重新了toString,才会使得输出不再是地址,变成千奇百怪的字符串。 

研究代码:

package main

import "fmt"

func main() {

	num := new(int)

	fmt.Printf("输出的值: %v  \n ", num) 		// 输出的值: 0xc0000a6058  
	fmt.Printf("类型: %T \n", num) 		//  类型: *int 
	fmt.Printf("地址:%v \n", &num) 		// 地址:0xc0000ca018
	fmt.Printf("指针指向的值: %v \n", *num) 		// 指针指向的值: 0

}

代码分析:

        首先,我们看看 ,我们new 出来的是啥?new 出来的是一个内存 —— 0xc0000a6058;

        然后,我们看看输出类型是啥?我们也看到系统给我们的答案是 *int,意味着它是一个指针;

        接着,我们运用 “ &变量 ” 的语法, 看下指针的地址:0xc0000a6058 ;

        最后,我们运用 “ * 变量 ” 的语法,看下指针指向的值 ,int默认值0。

        

        * star符号的运用,加在变量前面,*作为操作符 来 存 +取  到*p指针指向的内存值;如果在一个类型前面,说明整个"star和类型"都是一个指针类型 。& 操作符可以获取到一个指针,指针的本质就是地址,指向一块内存空间的地址。

        参考代码:

package main

import "fmt"

func main() {

	//定义2个int变量。
	i, j := 42, 2701

	p := &i //i的地址,p是变量,所以*p就作为操作符,存|取 到p地址的内存值。
	fmt.Println(*p)
	fmt.Printf("%T \n", p) //输出p类型
	*p = 21                //存取p地址指向的的值,即i的值。
	fmt.Println(i)

	p = &j       //j变量的地址p,
	*p = *p / 37 // *操作符,操作地址的值,左边的*p用于存,右边的*用于取。
	fmt.Println(j)
}

        参考:Golang指针解释,一劳永逸_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值