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

Описания RDS

Приложения

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

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

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

А.5.15.2. Макрос RDS_ARRAYDATA – указатель на первый элемент матрицы/массива

# Приложения

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

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

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

##### А.5.15.2. Макрос RDS_ARRAYDATA – указатель на первый элемент матрицы/массива

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

      RDS_ARRAYDATA(
        baseaddr      // Указатель на переменную
      )

Определение

      #define RDS_ARRAYDATA(baseaddr) \
        ( *((int**)(baseaddr))+2 )

Параметр

baseaddr(указатель)
  Указатель (может быть любого типа, в т.ч. и void*) на данные переменной в дереве переменных блока.

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

Указатель на первый элемент матрицы. Хотя технически он возвращается как указатель на целое (int*), его следует считать указателем произвольного типа и явно приводить к типу указателя на тип элемента матрицы (для матрицы вещественных чисел двойной точности – double* и т.п.).

Примечания

По указателю baseaddr в дереве переменных блока находятся восемь байтов, описывающих матрицу или массив. Четыре первых байта занимает указатель на данные матрицы. Если матрица пуста, этот указатель будет равен NULL, если нет, в области памяти, на которую он указывает, будут размешаться два тридцатидвухбитных целых числа, в первом из которых хранится число строк матрицы, во втором – число столбцов, а за ними последовательно располагаются значения элементов матрицы. Макрос RDS_ARRAYDATA возвращает указатель на первый после числа столбцов байт области данных матрицы, то есть на первый ее элемент. Массивы в RDS хранятся в памяти так же, как и матрицы, поэтому этот макрос можно применять как для матриц, так и для массивов.

Поскольку в макросе RDS_ARRAYDATA отсутствует проверка указателя на данные матрицы на значение NULL, и он сразу обращается к этим данным, использовать его можно только после проверки на существование матрицы, например, макросом RDS_ARRAYEXISTS. При желании, вместо макросов, работающих непосредственно с данными переменной, для получения описания матрицы или массива можно использовать структуру RDS_ARRAYACCESSDATA и функции, работающие с ней.

Пример

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

См. также

RDS_ARRAYCOLS, RDS_ARRAYROWS, RDS_ARRAYEXISTS, RDS_ARRAYACCESSDATA.