Go语言学习六:指针与传递到函数的指针

package main

import (
	"fmt"
)

const MAX int = 3

func main() {
	var a int = 20
	var ip *int /* 声明指针变量 */

	ip = &a

	ip = &a /* 指针变量的存储地址 */

	fmt.Printf("a 变量的地址是: %x\n", &a)

	/* 指针变量的存储地址 */
	fmt.Printf("ip 变量的存储地址: %x\n", ip)

	/* 使用指针访问值 */
	fmt.Printf("*ip 变量的值: %d\n", *ip)

	// 	当一个指针被定义后没有分配到任何变量时,它的值为 nil。
	// nil 指针也称为空指针。
	// nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
	// 一个指针变量通常缩写为 ptr。
	var ptr *int
	fmt.Printf("ptr 的值为 : %x\n", ptr) //这里指针是0
	if ptr == nil {                   /* ptr 不是空指针 */
		fmt.Println("这是空指针")
	}

	// 指针数组
	a1 := []int{10, 100, 200}
	var i int

	for i = 0; i < MAX; i++ {
		fmt.Printf("a1[%d] = %d\n", i, a1[i])
	}
	// 有一种情况,我们可能需要保存数组,这样我们就需要使用到指针。
	var ptr1 [MAX]*int //只有常量才能设定成员数量
	for i = 0; i < MAX; i++ {
		ptr1[i] = &a1[i] /* 整数地址赋值给指针数组 */

	}
	for i = 0; i < MAX; i++ {
		fmt.Printf("a[%d] = %d\n", i, *ptr1[i])
	}

	// 指向指针的指针
	var a2 int
	var ptr2 *int
	var pptr2 **int

	a2 = 3000
	/* 指针 ptr 地址 */
	ptr2 = &a2

	/* 指向指针 ptr 地址 */
	pptr2 = &ptr2

	/* 获取 pptr 的值 */
	fmt.Printf("变量 a = %d\n", a2)
	fmt.Printf("指针变量 *ptr = %d\n", *ptr2)
	fmt.Printf("指向指针的指针变量 **pptr = %d\n", **pptr2)

	// 指针作为函数参数
	 /* 定义局部变量 */
   var a3 int = 100
   var b int= 200

   fmt.Printf("交换前 a3 的值 : %d\n", a3 )
   fmt.Printf("交换前 b 的值 : %d\n", b )

   /* 调用函数用于交换值
   * &a3 指向 a3 变量的地址
   * &b 指向 b 变量的地址
   */
   swap(&a3, &b);

   fmt.Printf("交换后 a3 的值 : %d\n", a3 )
   fmt.Printf("交换后 b 的值 : %d\n", b )

}

// 指针作为函数参数
func swap(x *int, y *int) {
   var temp int
   temp = *x    /* 保存 x 地址的值 */
   *x = *y      /* 将 y 赋值给 x */
   *y = temp    /* 将 temp 赋值给 y */
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值