go语言 指针_new函数_指针变量做函数参数

        如果学过C的都知道,指针很多地方都要用到,我们声明一个变量,其实就是就是开辟一块内存空间,我们在操作变量的时候,并不是直接取操作变量存在的空间,而是这个变量的内存地址。变量名对内存地址的引用。因此声明一个变量包含:内存空间和内存地址

package main

import "fmt"

func main() {
	// 对于任意一个变量,都有两个含义:内存和地址
	var a = 10
	fmt.Printf("a = %d\n", a)    // 变量的内存
	fmt.Printf("&a = %v \n", &a) // 变量的地址
	fmt.Printf("&a = %p \n", &a) // 变量的内存
	fmt.Println("------------------------------------ ")

	// 保存某一个变量的地址,需要用到指针   *int 保存int的地址  **int 保存*int的地址
	// 声明(定义) 定义只是特殊的声明
	// 声明一个变量为P 类型为*int 默认值为nil
	var p *int //定义一个指针变量
	p = &a     //指针变量指向谁,就把谁的地址值赋值给哪个指针变量
	fmt.Printf("p = %p, &a = %v \n", p, &a)

	//*p表示访问指针变量p所指的单元a的值,指针p保存的a的地址
	fmt.Printf("*p = %v, a = %v\n", *p, a) // *p=10,a=10

	*p = 1111 // 表示把值赋值给变量a

	fmt.Printf("*p = %v, a = %v\n", *p, a) // 此时是把a的地址赋值给指针变量p, *p=1111 a=1111

	fmt.Println("")
	var b *int // 如果不初始化,默认值是nil
	fmt.Println("b =  ", b)
	*b = 222 //err b指针没有合法的指向

}

二、new 函数

     表达式new(T)将创建一个T类型的匿名变量,为T类型的新值分配并且清零一块内存空间,然后将这块内存空间的地址值作为结果返回,这个结果就是指向这个新的T类型 的指针值,返回的指针类型为*T.

    我们在使用new函数时候,可以随意的使用,不用担心要关闭和删除空间,go语言会有自动回收机制

package main

import "fmt"

func main() {
	a := 10
	var p *int
	p = &a // 合法指向
	*p = 111
	fmt.Printf("*p=%v\n", *p)

	var c *int
	c = new(int) // a为*int类型,指向匿名变量int
	*c = 222
	fmt.Printf("*c=%v\n", *c)

	b := new(int) // b为*int类型,指向匿名变量int
	*b = 333
	fmt.Printf("*b=%v\n", *b)

}

三、指针做函数参数

package main

import "fmt"

func swap(a, b int) {
	a, b = b, a
	fmt.Printf("a = %d, b = %d\n", a, b)
}
func swapPointer(p1, p2 *int) {
	*p1, *p2 = *p2, *p1
	fmt.Printf("*p1 = %v, *p2 = %v\n", *p1, *p2)
}
func main() {
	/*********普通变量做参数************/
	a, b := 1, 2
	// 通过一个函数交换a和b的位置
	swap(a, b)
	fmt.Printf("a = %d, b = %d\n", a, b)
	fmt.Printf("------------------------------\n")
	/*********指针变量作为参数************/
	c, d := 3, 4
	swapPointer(&c, &d)
	fmt.Printf("c = %d, d = %d\n", c, d)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值