Golang笔记--指针变量

golang中指针也是一个变量,存储的数据不是一个普通的值,而是另外一个变量的内存地址,所以实际上指针就是一个引用类型。

func testPointFunc(num *int) {
	*num = 40
}


func main() {

	var num int = 10
	//num地址是
	fmt.Printf("num值是%v,类型是%T,地址是%p\n", num, num, &num)
	//声明一个指针类型的变量pointNum,把num的地址赋值给pointNum
	var point *int = &num
	//指针变量point的值就是num地址,而指针变量point也有自己的内存地址
	fmt.Printf("point值是%v,类型是%T,地址是%p\n", point, point, &point)

	//通过指针变量point可以修改num的值
	*point = 20
	fmt.Printf("num值是%v,类型是%T,地址是%p\n", num, num, &num)

	testPointFunc(point)
	fmt.Printf("num值是%v,类型是%T,地址是%p\n", num, num, &num)
}

上面案例中,*point表示取出point这个指针变量对应的num的内存地址的值,point表示num对应的内存地址。

golang中提供了new函数创建指向分配的内存空间的指针,和make不同,make用于创建引用类型的实例。

//make创建切片引用类型的对象
var mapTest = make([]string, 0)
fmt.Printf("num值是%v,类型是%T,num地址是%p\n", mapTest, mapTest, &mapTest)

//new创建并分配内存空间,返回指向该内存空间的指针
var num1 *int
num1 = new(int)
*num1 = 10
fmt.Printf("num1值是%v,类型是%T,num2地址是%p\n", num1, num1, &num1)

var num2 = new(int)
fmt.Printf("num2值是%v,类型是%T,num2地址是%p\n", num2, num2, &num2)

小结

new和make函数的异同。

共同点:

        两者都是用来分配内存的,两者都有自己的内存地址。

用途不同:

        make 用于创建切片、映射和通道等引用类型的对象。

        new 用于创建并分配内存空间,并且内存对应的值为类型零值,返回指向该内存空间的指针。

返回值类型不同:

        make 返回的是已初始化的对象,即对应引用类型的实例。

        new 返回的是指向分配的内存空间的指针。

上一篇:记录golang常用库-json处理

下一篇:linux环境PostgreSQL安装

关注公众号

发表评论