指针
定义
指针变量可以指向任何一个值的内存地址。
声明
var var_name *var-type
1 | var p *int |
指针的使用
使用流程
- 定义指针变量。
- 为指针变量赋值。
- 访问指针变量中指向地址的值。
在一个变量前加
&
号来获取变量的内存地址。
在指针类型前面加*
号来获取指针所指向的内容。
如果在一个指针类型的变量前面加&号,就会得到一个新的内存地址(指针),这个新的指针指向的是另一个指针,则称这个指针变量为指向指针的指针变量。
访问指向指针的指针变量值需要加两个*号。
结构体
定义:结构体是一个字段的集合
结构体字段使用点号访问
数组
slice (切片)
slice会指向一个序列的值,并且包含长度信息。
[ ]T 是一个元素类型为T的切片1
p := []int{2, 3, 5, 7, 11, 13}
切片的定义
var identifier [] type
- 通过make()函数定义
var slice1 []type = make([]type,len)
,其中len代表切片初始长度。 - 指定切片容量
make[]T,length,capacity
slice截取
slice可以重新截取,创建一个新的slice值指向相同的数组。s[l:h]
表示从数组的l到h-1的slice元素 注意:包含左侧l
,但不包含右侧 h
如果缺省下限则默认下限为0
如果缺省上限则默认上限为切片长度
slice相关函数
len() 函数
获取切片长度
cap()函数
获取切片容量
append() 函数
向切片追加新元素
copy()函数
拷贝切片
map
map 是一种无序的键值对的集合,key-value形式。
map是通过hash表实现的。
map在使用之前必须用make来创建(不是new);
值为nil的map是空的,且不能赋值
- 修改map m的一个元素或者向map m中插入一个元素
m[key] = elem
- 获取map m中的一个元素
elem = m[key]
- 删除元素
delete(m,key)
- 检测某个键是否存在
elem, ok := m[key]
如果key在m中ok为true,elem为key对应的value;否则,ok为false,elem为nil
Range关键字
range用于for循环中迭代数组、切片、链表或集合的元素。
在数组和切片中返回元素索引,元素值
,在集合中返回key