您的位置:首页 > 编程语言 > Go语言

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

2016-03-30 20:23 731 查看
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 */
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: