On branch main
modified: src/ch01.md
This commit is contained in:
29
src/ch01.md
29
src/ch01.md
@@ -332,3 +332,32 @@ pub fn init(name: []const u8, power: u64) User {
|
|||||||
|
|
||||||
## Массивы и срезы
|
## Массивы и срезы
|
||||||
|
|
||||||
|
Мы могли бы обойти молчанием последнюю строчку нашего примера (`name: []const u8`),
|
||||||
|
но, поскольку этот пример содержит аж 2 строковые константы (`"Пётр"` и `"{s} обладает силой {d}\n"`),
|
||||||
|
то наверняка Вы любопытствуете по поводу строк в Zig. Чтобы лучше понимать строки,
|
||||||
|
нужно сначала ознакомиться с массивами и срезами.
|
||||||
|
|
||||||
|
Массивы имеют фиксированный размер, их длина (количество элементов) известна
|
||||||
|
во время компиляции. Длина является составляющей частью типа, то есть
|
||||||
|
массив из 4-х знаковых целых (`[4]i32`) и массив из 5-ти знаковых целых (`[5]i32`) -
|
||||||
|
это разные типы.
|
||||||
|
|
||||||
|
Длина массива может быть выведена из его инициализатора. В следующем отрывке кода
|
||||||
|
все 3 массива имют тип `[5]i32`:
|
||||||
|
|
||||||
|
```zig
|
||||||
|
const a = [5]i32{1, 2, 3, 4, 5};
|
||||||
|
|
||||||
|
// мы уже видели синтаксис .{...} со структурами
|
||||||
|
// он также работает и с массивами
|
||||||
|
const b: [5]i32 = .{1, 2, 3, 4, 5};
|
||||||
|
|
||||||
|
// используйте _, тогда компилятор сам вычислит длину
|
||||||
|
const c = [_]i32{1, 2, 3, 4, 5};
|
||||||
|
```
|
||||||
|
|
||||||
|
С другой стороны, срез - это пара указатель плюс длина, при этом длина
|
||||||
|
становится известной лишь при исполнении программы. Мы пройдёмся
|
||||||
|
по указателям далее, а пока Вы можете представлять себе срез как некое "окно"
|
||||||
|
в массиве.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user