17.数组
数组 是用来存储一系列数据,拥有相同类型 T 的对象的集合,在内存中是连续存储的。使用中括号 [] 来创建,且它们的大小在编译时会被确定。数组下标是从0 开始。数组是在栈中分配的,数组可以自动被借用成为 切片(slice)。
数组的声明和初始化
1 2 3 4 5 6 7 8
| let 变量名:[数据类型;数组长度]=[值1,值2,值3,...]; let arr1:[&str;3]=["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"];
let 变量名=[值1,值2,值3,...]; let arr2=["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"];
let 变量名:[数据类型;数组长度]=[默认值,数组长度]; let arr3:[&str;3]=["";3];
|
获取数组长度 len()
1
| print!("{}",arr1.len());
|
遍历数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| for item in arr1{ print!("充电科目 :{}\n",item); } //输出 充电科目 :Go语言极简一本通 充电科目 :Go语言微服务架构核心22讲 充电科目 :从0到Go语言微服务架构师
for item in arr1.iter(){ print!("已参加的充电科目 :{}\n",item); } //输出 已参加的充电科目 :Go语言极简一本通 已参加的充电科目 :Go语言微服务架构核心22讲 已参加的充电科目 :从0到Go语言微服务架构师
如果修改一个不可变数组,报错如下: arr2[0]=""; error[E0594]: cannot assign to `arr2[_]`, as `arr2` is not declared as mutable
如果想修改这个错误,声明数组的时候,添加 mut 关键字
|
数组做参数
值传递 传递一个数组的副本,副本的修改,不会影响原数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| let mut arr2=["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"]; print!("{:?}\n",arr2); show_arr(arr2); print!("{:?}\n",arr2);
fn show_arr(arr:[&str;3]){ let l = arr.len(); for i in 0..l { println!("充电科目: {}",arr[i]); } }
//输出 ["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"] 充电科目: Go语言极简一本通 充电科目: Go语言微服务架构核心22讲 充电科目: 从0到Go语言微服务架构师 ["Go语言极简一本通", "Go语言微服务架构核心22讲", "从0到Go语言微服务架构师"]
|
引用传递 传递内存的地址给函数,修改数组的任何值都会修改原来的数组。
1 2 3 4 5 6 7 8 9 10 11
| fn modify_arr(arr:&mut [&str;3]){ let l = arr.len(); for i in 0..l { arr[i]=""; } }
let mut arr3=["Go语言极简一本通","Go语言微服务架构核心22讲","从0到Go语言微服务架构师"]; print!("{:?}\n",arr3); modify_arr(&mut arr3); print!("{:?}\n",arr3);
|
添加微信 |
公众号更多内容 |
 |
 |