реклама
Бургер менюБургер меню

Программист – Программирование на gforth (страница 11)

18

Можно создать и инициализировать переменную сразу:

CREATE my-var 123 ,

Здесь: * CREATE — создаёт новое слово; * 123 — начальное значение; * , — записывает значение в память.

Чтение и запись:

my-var @ . \ Выводит 123

456 my-var ! \ Записываем новое значение

my-var @ . \ Выводит 456

4. Массивы

В Forth массивы создаются с помощью CREATE и ALLOT.

Создание массива из 10 целых чисел:

CREATE int-array 10 CELLS ALLOT

Где: * CELLS — размер одного элемента (обычно 4 байта); * ALLOT — выделяет память.

Доступ к элементам: * индекс CELLS массив + — адрес элемента; * @ / # — чтение/запись.

Пример работы с массивом:

: array-set ( значение индекс массив -- )

CELLS + ! ;

: array-get ( индекс массив -- значение )

CELLS + @ ;

Использование:

5 0 int-array array-set \ Записываем 5 в элемент 0

2 1 int-array array-set \ Записываем 2 в элемент 1

0 int-array array-get . \ Выводит 5

1 int-array array-get . \ Выводит 2

5. Динамическое выделение памяти

Для динамического выделения памяти используются: * ALLOCATE — выделяет блок памяти, возвращает адрес и флаг успеха; * FREE — освобождает память; * RESIZE — изменяет размер блока.

Пример динамического массива:

VARIABLE dynamic-array

VARIABLE array-size

: create-dynamic ( размер -- )

CELLS ALLOCATE IF

." Ошибка выделения памяти" CR

DROP

ELSE

dynamic-array !

array-size !

THEN ;

: free-dynamic

dynamic-array @ FREE DROP ;

6. Строки и работа с текстом

В Gforth строки можно создавать разными способами:

Способ 1: CREATE с C,"

CREATE message C," Hello, world!"

Способ 2: S"

S" Hello" CONSTANT greeting

Операции со строками: * COUNT — получает адрес и длину строки; * TYPE — выводит строку на экран.

Пример:

message COUNT TYPE \ Выводит "Hello, world!"

greeting COUNT TYPE \ Выводит "Hello"

Создание изменяемой строки:

CREATE buffer 256 ALLOT \ Буфер на 256 байт

: set-string ( адрес-строки длина -- )

buffer SWAP CMOVE ; \ CMOVE копирует строку

: print-buffer

buffer COUNT TYPE CR ;

Использование:

S" Test string" set-string

print-buffer \ Выводит "Test string"

7. Указатели и адреса памяти

В Forth можно напрямую работать с адресами памяти:

ADDR

— получает адрес переменной/массива;

CELL+

— смещение на один элемент;