

(八)golang--复杂类型之指针
source link: http://www.cnblogs.com/xiximayou/p/11831091.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

首先我们要明确:
(1)基本数据类型:变量存的就是值,也叫值类型;
(2)获取变量的地址,用&,例如var num int,获取num的地址:#
(3)指针类型:变量存的是一个地址,这个地址指向的空间存的才是值,例如var ptr *int = #
(4)获取指针类型所指向的值,使用*,例如var *ptr int,使用*ptr获取ptr指向的值;
package main import ( "fmt" ) func main() { var num int = 1 var ptr *int = # fmt.Println("num的地址是:", #) fmt.Println("ptr的值是:", ptr) fmt.Println("ptr的地址是:", &ptr) }
ptr是一个指针,它的值是num的地址,同时,它自己也会有一个地址。我们可以通过地址定位到变量并改变变量的值:
package main import ( "fmt" ) func main() { var num int = 1 var ptr *int fmt.Println("num的值是:", num) ptr = # *ptr = 10 fmt.Println("num的值是:", num) }
我们还可以通过切换指针的值来改变不同变量的值:注意指针类型与变量类型之间要匹配。
package main import ( "fmt" ) func main() { var num1 int = 1 var num2 int = 2 var ptr *int fmt.Println("num1的值是:", num1) fmt.Println("num2的值是:", num2) ptr = &num1 *ptr = 10 ptr = &num2 *ptr = 20 fmt.Println("num1的值是:", num1) fmt.Println("num2的值是:", num2) }
指针使用细节:
(1)值类型,都有对应的指针,形式为*数据类型,比如int对应的指针就是*int,float32对应的指针就是*float;
(2)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;
值类型和引用类型:
(1)值类型包括:基本数据类型int系列、float系列、bool、string、数组和结构体;
(2)引用类型:指针、slice切片、map、管道channel、interface等;
值类型和引用类型的区别:
(1)值类型,变量直接存储,内存通常在
栈
中分配;
(2)引用类型:变量存储的是一个地址,这个地址对应的空间才是真正存储的数据值,内存通常在堆上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就是一个垃圾,由GC来回收;
Recommend
-
27
一,变量类型 变量分为值类型,指针类型和引用类型。 以如下变量定义和赋值语句为例: package main import( "fmt" ) func main(){ var a int = 1 p := &a fmt.Printf("%v\n", a)...
-
28
今天在力扣上做二叉树前序遍历的题目时,遇到一个困惑的问题,先来看看我用递归实现的代码: func preorderTraversal(root *TreeNode) []int { res := make([]int, 0) getVal(root, res) return res } func getVal...
-
12
《C语言高级专题第7部分-4.7.存储类&作用域&生命周期&链接属性》 第一部分、章节目录 4.7.1.概念解析 4.7.2.linux下C程序的内存映像 4.7.3、存储类相关的关键字1 4.7.4.存储类相关的关键...
-
12
原博客地址 golang的三种指针类型 具体类型的指针,如int、string等 unsafe.Pointer,在unsafe下面,任何具体类型的指针都能转化成Pointer,...
-
11
Go语言类型断言、类型选择、指针、数组的问题以及生成二进制可执行文件去部署项目 类型断言 提供了访问接口值底层...
-
9
Go 语言没有引用类型,指针也与众不同 面向对象编程强调数据和操作绑定,方法是有状态的,本身可能会修改数据。因此编程时确定方法是否会修改原始数据尤其关键。多数从其他语言转到 Go 语言的开发者,都会首先了解...
-
9
接收者那种情况下定义为指针,那种情况下定义为类型? - V2EX V2EX › Go 接收者那种情况下定义为指针,那种情况下定义为类型? ...
-
6
Go错误集锦 | 聊聊方法接收者的值类型和指针类型之间的区别 yudotyang · 5天之前 · 138 次点击 ·...
-
7
c++ 模板 指针类型偏特化 一步步来,先简单点. 目标:我们要实现一个模板类,例化后,可以通过get_val获取到值,通过get_ptr获取到指针.具体什么意思...
-
6
Unreal 各种指针类型是怎么回事 读完本篇文章,你会了解为何UE中C++作为其开发语言,使用的指针...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK