分类
指针
指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go 语言对指针的支持介于 Java 语言和 C/C++语言之间,它既没有想 Java 语言那样取消了代码对指针的直接操作的能力,也避免了 C/C++语言中由于对指针的滥用而造成的安全和可靠性问题。
基本操作-和C相同
保存某个变量的地址,需要指针类型*int 保存int的地址,**int 保存 *int 地址
Go语言虽然保留了指针,但与其它编程语言不同的是:
- 默认值 nil,没有 NULL 常量
- 操作符"&”取变量地址,“*”通过指针访问目标对象
- 不支持指针运算,不支持"->“运算符,直接用”.”访问目标成员,同样的不能操作没有合法指向的指针变量。
new
动态分配空间
- 同样的,也可以自动推导类型
q := new(int)
注意:go语言无需向c++语言一样,动态申请的空间还需要自己手动释放。go语言中,我们只需使用new()函数,无需担心其内存的生命周期或怎样将其删除,因为Go语言的内存管理系统会帮我们打理一切。
普通变量做函数参数
指针做函数参数
这些都和C相同。
数组
数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element)一个数组包含的元素个数被称为数组的长度。
数组长度必须是常量,且是类型的组成部分。[2]int 和[3]int 是不同类型。
语法var id [50]int
- 操作数组元素,是通过0-len()-1的下标进行操作的,下标可以是常量也可以是变量。
- 数组初始化—全部初始化
var a [5]int=[5]int{1,2,3,4,5}
- 自动推导类型
b:=[5]int{1,2,3,4,5}
- 数组初始化—部分初始化,没有初始化的元素自动赋值为0
- 指定某个元素初始化
d := [5]int{2: 10, 4: 20}
二维数组
- 初始化,全部初始化以及部分初始化
数组比较和赋值
只支持==以及!=其他的不支持,数组比较是比较是不是每一个元素都一样,2个数组之间进行比较,要保证数组类型一样。注意[]中间的数字也算类型的一部分
同类型的数组可以赋值。
随机数
如果种子参数一样,每次运行程序产生的随机数都一样
- 以当前时间作为种子参数
- 可以通过
Intn()
来限制随机数的范围