GO语言基础语法之指针(第十五天)

指针

  • 与C语言类似,go也有指针,指针的引用,使用者就可以直接使用指针修改、获取内存中的内容
    Go 语言的取地址符是 &,与C语言类似。

GO语言的指针声明:
var varName * varType

C语言指针声明:
varType * varName

Go 空指针:
当一个指针被定义后没有分配到任何变量时,它的值为 nil。
nil 指针也称为空指针。

C语言空指针:
值为 NULL 0

Go 语言允许向函数传递指针,只需要在函数定义的参数上设置为指针类型即可,这个与C语言类似。

以下实例演示了如何向函数传递指针,并在函数调用后修改函数内的值,注意最后一个未能修改成功,因为是值传递,就是拷贝。

package main
import "fmt"

/*仿照C语言写的交换函数*/
func swap_C(x *int, y *int) {
	var temp int
	temp = *x /* 保存 x 地址的值 */
	*x = *y   /* 将 y 赋值给 x */
	*y = temp /* 将 temp 赋值给 y */
}

/*GO的多重赋值,修改的是传入地址的内容*/
func swap_GO(a *int, b *int) {
	*a, *b = *b, *a
}

/*GO 的多重赋值,直接交换值*/
func swap_GO_mini(a int, b int) {
	a, b = b, a
}

func main() {
	/* 定义局部变量 */
	var a int = 100
	var b int = 200
	fmt.Printf("交换前 a 的值 : %d ,a 的地址:%x\n", a, &a)
	fmt.Printf("交换前 b 的值 : %d,b的地址:%x \n", b, &b)
	swap_C(&a, &b)
	fmt.Printf("交换后 a 的值 : %d ,a 的地址:%x\n", a, &a)
	fmt.Printf("交换后 b 的值 : %d,b的地址:%x \n", b, &b)
	fmt.Printf("*************************************\n")

	/* 定义局部变量 */
	var c int = 300
	var d int = 400
	fmt.Printf("交换前 c 的值 : %d ,c 的地址:%x\n", c, &c)
	fmt.Printf("交换前 d 的值 : %d ,d的地址:%x \n", d, &d)
	swap_GO(&c, &d)
	fmt.Printf("交换后 c 的值 : %d ,d 的地址:%x\n", c, &c)
	fmt.Printf("交换后 d 的值 : %d,d的地址:%x \n", d, &d)
	fmt.Printf("*************************************\n")

	/* 定义局部变量 */
	var e int = 500
	var f int = 600
	fmt.Printf("交换前 e 的值 : %d ,e 的地址:%x\n", c, &e)
	fmt.Printf("交换前 f 的值 : %d ,f的地址:%x \n", d, &f)
	swap_GO_mini(e, f)
	fmt.Printf("交换后 e 的值 : %d ,e 的地址:%x\n", c, &e)
	fmt.Printf("交换后 f 的值 : %d,f的地址:%x \n", d, &f)
}

API server listening at: 127.0.0.1:9101
交换前 a 的值 : 100 ,a 的地址:c0000a8090
交换前 b 的值 : 200,b的地址:c0000a8098 
交换后 a 的值 : 200 ,a 的地址:c0000a8090
交换后 b 的值 : 100,b的地址:c0000a8098 
*************************************
交换前 c 的值 : 300 ,c 的地址:c0000a80d0
交换前 d 的值 : 400 ,d的地址:c0000a80d8 
交换后 c 的值 : 400 ,d 的地址:c0000a80d0
交换后 d 的值 : 300,d的地址:c0000a80d8 
*************************************
交换前 e 的值 : 400 ,e 的地址:c0000a8100
交换前 f 的值 : 300 ,f的地址:c0000a8108 
交换后 e 的值 : 400 ,e 的地址:c0000a8100
交换后 f 的值 : 300,f的地址:c0000a8108 

发布了205 篇原创文章 · 获赞 47 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/qq_32744005/article/details/105189425