Каково максимальное количество разрешений для массива на С++?
Вы можете объявить очень простой массив с 10 элементами и использовать его таким образом:
int myArray[10];
myArray[4] = 3;
std::cout << myArray[4];
Или объявите 2d-массив с элементами 10x100 как int myArray[10][100];
Даже создайте более сложные 3-мерные массивы с помощью int myArray[30][50][70];
Я даже могу дойти до записи:
int complexArray[4][10][8][11][20][3];
complexArray[3][9][5][10][15][3] = 5;
std::cout << complexArray[3][9][5][10][15][3];
Итак, каково максимальное количество измерений, которое можно использовать при объявлении массива?
Ответы
Ответ 1
Стандарт рекомендует реализациям принять не менее 256 (ISO 14882, B.2), но они могут поддерживать меньше или больше:
Пределы могут ограничивать количества, которые включают в себя описанные ниже или другие. Число в скобках после каждого количества рекомендуется как минимум для этого количества. Однако эти величины только рекомендации и не определяют соответствия.
[...]
- указатели, массивы и функции (в любой комбинации), изменяющие арифметику, структуру, объединение или неполный тип в объявлении [256].
Это то же самое и в С++ 03 и С++ 11.
Ответ 2
Мой первый пост!
Для чего это стоит, предел в моей системе составляет всего 30 измерений при распределении статически и 19 измерений при распределении в стеке. Системой является AMD A10-7700K, 64-разрядная (8 ГБ оперативной памяти). Скомпилирован на Visual С++ 2013 с настройками по умолчанию.
Обратите внимание, что для определения максимума в вашей системе используйте наименьший тип данных (char) с наименьшим размерным размером (2). Нет предела, когда размерность равна 1, поскольку размерность 1 (в любом измерении) является избыточной и не влияет на общий размер массива. Разумеется, чем больше тип данных, тем больше размер измерения, тем меньше у вас размеров. Однако я обнаружил, что любое (и только одно) измерение может быть 3, но не 4.
#include<iostream>
int main()
{
char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
}
Ответ 3
Единственный предел, который вы имеете при написании массивов, - это объем памяти вашего компьютера.