Ну, вы всегда можете создать «симметричный» массив в C (то есть прямоугольный массив) и использовать только «асимметричную» его часть.Это очень хорошее решение для небольших массивов.И это именно то, что делает ваше объявление PATTERN_LOOKUP
(элементы, которые не были явно инициализированы, будут неявно инициализированы нулями).
Однако для больших массивов это может быть слишком дорого в термах потраченной памяти.Если это слишком дорого, вы всегда можете использовать «смоделированный» 2D-массив в C (массив указателей на подмассивы)
static int array0[] = { 0 };
static int array1[] = { 6, 18 };
static int array2[] = { 6, 22, 38 };
static int array3[] = { 6, 26, 46, 66 };
static int array4[] = { 6, 28, 50, 72, 94 };
static int *const PATTERN_LOOKUP[] = {
array0,
array1,
array2,
array3,
array4
};
Вы даже можете использовать запись NULL
в массиве PATTERN_LOOKUP
для представления пустого массива
static int *const PATTERN_LOOKUP[] = {
NULL,
array1,
array2,
array3,
array4
};
В C99 вы можете использовать составные литералы для достижения того же результата без отдельных объявлений подмассива
static int *const PATTERN_LOOKUP[] = {
(int []) { 0 },
(int []) { 6, 18 },
(int []) { 6, 22, 38 },
(int []) { 6, 26, 46, 66 },
(int []) { 6, 28, 50, 72, 94 }
};
Конечно, вы сохраняете / запоминаетефактический размер каждого отдельного подмассива.