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 */ }
相关文章推荐
- CF_5A_ChatServer'sOutgoingTraffic
- 尽量用goto代替尾递归
- HZNU-1480-The Gougu Theorem【勾股数】
- Django基础——Model篇(二)
- Django创建工程及应用
- UVa11090 Going in Cycle!!
- 【暑假】[深入动态规划]UVa 10618 Tango Tango Insurrection
- Django-rest-framework学习(-)Serialization
- mongotemplate做插入时怎样去掉多余字段
- 【干货】Go语言开发常见陷阱,你遇到过几个?
- Django REST 异常处理
- Google带WiFi的热气球或首次商用
- Google带WiFi的热气球或首次商用
- Go net包介绍
- Django Models的数据类型 汇总
- Google推荐的图片加载库Glide介绍
- 百度地图缩放、比例尺、logo操作
- mongostat
- CodeForces - 368C Sereja and Algorithm (找规律&模拟)
- Django1.8静态文件配置