Код: Выделить всё
const char *foo[] = {
"hello",
NULL,
"cruel",
NULL,
NULL,
"world",
};
Поэтому вместо таких строк, как «привет» и «мир», можно ли использовать какой-то синтаксис списка инициализаторов, например &{ 1, 4, 12} или &({ 0, 4, 9 }) или что-то еще? Или строки — это просто особый случай в синтаксисе?
Я посмотрел «Инициализация указателя на массив целых чисел», но это не помогло. Кроме того, этот вопрос был задан 11 лет назад, и, возможно, более поздний стандарт C++ может предоставить такую возможность?
Примечание: изначально этот вопрос был задан как для C, так и для C++, но некоторые комментаторы возражали. Интересные ответы ниже относятся к C++, хотя в комментариях было представлено простое решение на C, поэтому я переключил заголовок и тег на C++.
В если это актуально:
- Целочисленные данные предварительно вычисляются и не изменяются.
- Для целей поиска каждый указатель на целочисленный массив естественным образом принадлежит определенной позиции индекса массива указателей foo. Это не произвольно.
- Для каждого элемента в некотором наборе данных, который пользователь хочет обработать, он будет использовать простую математическую формулу для получения целочисленного числового значения. Таким образом, если они получают (например) 0 из математических вычислений, им нужно просмотреть foo[0], чтобы найти указатель на соответствующий массив (например) 1, 4, 12.
- Позиции индекса, содержащие NULL, математически невозможны и никогда не будут доступны.
- Каждый массив целых чисел будет того же измерения.
- Однако почти 80% указателей будут иметь значение NULL, поэтому двумерный массив будет расточительным.
- Размеры будут большими, но не настолько большими, чтобы чтение из файла было единственным разумным вариантом. Скажем, массив из 5000 указателей на массивы из 1000 целых чисел (вместо этого 80% указателей имеют значение NULL). Включаемый файл, объявляющий foo, будет создан автоматически.
Подробнее здесь: https://stackoverflow.com/questions/788 ... -a-way-tha