Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.15. Работа с матрицами и массивами

А.5.15.4. Макрос RDS_ARRAYITEM – элемент матрицы с заданными индексами

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.15. Работа с матрицами и массивами

##### А.5.15.4. Макрос RDS_ARRAYITEM – элемент матрицы с заданными индексами

Макрос RDS_ARRAYITEM возвращает элемент статической или динамической переменной блока, являющейся матрицей или массивом, с указанными в параметрах индексами. Он может использоваться только для матриц и массивов простых переменных и только вместе со структурой RDS_ARRAYACCESSDATA.

      RDS_ARRAYITEM(
        type,    // Тип элемента
        acc,     // Указатель на структуру описания
        r,       // Строка
        c        // Столбец
      )

Определение

      #define RDS_ARRAYITEM(type,acc,r,c) \
        ( *((type *)RDS_ARRAYITEMADDR(acc,r,c)) )

Параметры

type(имя типа)
  Простой тип элемента матрицы/массива (double, int и т.д.).
acc(RDS_ARRAYACCESSDATA*)
  Указатель на структуру описания матрицы RDS_ARRAYACCESSDATA.
r, c(целые)
  Строка (r) и столбец (c) элемента, нумерация начинается с нуля.

Возвращаемое значение

Значение элемента матрицы, описываемой структурой acc. Это значение может использоваться как в правой, так и в левой (lvalue) части выражений.

Примечания

Для использования этого макроса необходимо иметь заполненную структуру описания матрицы RDS_ARRAYACCESSDATA (указатель на нее передается во втором параметре макроса). Сам макрос определен через другой макрос – RDS_ARRAYITEMADDR – который возвращает указатель на данные элемента матрицы с указанным номером. Этот адрес затем приводится к типу «указатель на type», после чего оператором * берется его содержимое (именно поэтому этот макрос можно использовать только для матриц, элементы которых имеют простой тип, совпадающий с одним из типов языка C). Массивы в RDS хранятся в памяти так же, как и матрицы, поэтому этот макрос можно применять как для матриц, так и для массивов – в массиве в качестве номера строки всегда следует передавать 0.

Пример

Пример использования RDS_ARRAYITEM приведен в §2.5.3 руководства программиста.

См. также

RDS_ARRAYACCESSDATA, RDS_ARRAYITEMADDR.