Go基础编程:复合类型—指针
来源:互联网 发布:可以在芜湖学java吗 编辑:程序博客网 时间:2024/05/16 13:55
指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C++语言中由于对指针的滥用而造成的安全和可靠性问题。
基本操作
Go语言虽然保留了指针,但与其它编程语言不同的是:
- 默认值 nil,没有 NULL 常量
- 操作符 “&” 取变量地址, “*” 通过指针访问目标对象
- 不⽀持指针运算,不⽀持 “->” 运算符,直接⽤ “.” 访问目标成员
func main() { var a int = 10 //声明一个变量,同时初始化 fmt.Printf("&a = %p\n", &a) //操作符 "&" 取变量地址 var p *int = nil //声明一个变量p, 类型为 *int, 指针类型 p = &a fmt.Printf("p = %p\n", p) fmt.Printf("a = %d, *p = %d\n", a, *p) *p = 111 //*p操作指针所指向的内存,即为a fmt.Printf("a = %d, *p = %d\n", a, *p)}
new函数
表达式new(T)将创建一个T类型的匿名变量,所做的是为T类型的新值分配并清零一块内存空间,然后将这块内存空间的地址作为结果返回,而这个结果就是指向这个新的T类型值的指针值,返回的指针类型为*T。
func main() { var p1 *int p1 = new(int) //p1为*int 类型, 指向匿名的int变量 fmt.Println("*p1 = ", *p1) //*p1 = 0 p2 := new(int) //p2为*int 类型, 指向匿名的int变量 *p2 = 111 fmt.Println("*p2 = ", *p2) //*p1 = 111}
我们只需使用new()函数,无需担心其内存的生命周期或怎样将其删除,因为Go语言的内存管理系统会帮我们打理一切。
指针做函数参数
func swap01(a, b int) { a, b = b, a fmt.Printf("swap01 a = %d, b = %d\n", a, b)}func swap02(x, y *int) { *x, *y = *y, *x}func main() { a := 10 b := 20 //swap01(a, b) //值传递 swap02(&a, &b) //变量地址传递 fmt.Printf("a = %d, b = %d\n", a, b)}
阅读全文
0 0
- Go基础编程:复合类型—指针
- Go基础编程:复合类型—数组
- Go基础编程:复合类型—map
- Go基础编程:复合类型—切片slice
- Go基础编程:复合类型—结构体
- Go编程基础—类型和变量
- 复合类型 —— 指针
- 复合类型——引用、指针
- 复合类型——指针和引用
- 复合类型(二):指针
- 4-复合类型-指针
- 复合类型之指针
- Go起步:5、复合类型2--指针(pointer)、结构体(struct)
- Go编程基础—go常用命令
- Go基础编程:格式化输出、类型转换、类型别名
- go - 复合类型 array, slice, map
- Go编程基础—常量
- Go编程基础—格式化
- android插件化框架-VirtualApk
- html 文字两边加横线\竖线
- 腾讯TBS服务的应用
- 最大流最小割算法入门理解
- ABBYY FineReader去他的光棍节,我要我的双十一
- Go基础编程:复合类型—指针
- LeetCode解题-#4-Median of Two Sorted Arrays
- Apache Shiro简单介绍
- java获取本机ip以及客户端ip
- SQL之自己还没来得及看的提纲(以及sqlmap的使用教程简单)
- SpringBoot中使用Swagger生成RESTful规范API文档
- [Tensorflow] convolution卷积 && pooling池化
- interrupt()方法
- linux下gcc编译静态库和动态库