Приложения
Приложение А. Функции, константы и структуры 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 руководства программиста.
См. также