Форум программистов, компьютерный форум CyberForum.ru

Статический массив, в котором количество элементов задаётся неконстантной переменной - C++

Восстановить пароль Регистрация
 
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 12:47     Статический массив, в котором количество элементов задаётся неконстантной переменной #1
Почему такое вообще катит ?
Что говорит стандарт на эту тему?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main() {
    
    int N;
    
    cin >> N;
    
    int a[N];
    
    for (int i=0; i<N; i++)
    cin >> a[i];
    
    for (int i=0; i<N; i++)
    cout << a[i] << endl;
    
    return 0;
}
Проверялось на QtCreator 3.0.0 с MinGW64, также на ideone.com. Даже предупреждений не выдаётся.
Посему вопросы:
а) соответствует ли такое объявление массива стандарту?
б) если нет, то как компиляторы обрабатывают сие?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 12:47     Статический массив, в котором количество элементов задаётся неконстантной переменной
Посмотрите здесь:

C++ Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
C++ Массив: Определить строку, в котором среднее арифметическое положительных элементов имеет наименьшее значение
Двумерный массив. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов C++
Одномерный массив. Найти и напечатать количество чётных элементов и количество нечётных элементов C++
Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
24.01.2014, 12:54     Статический массив, в котором количество элементов задаётся неконстантной переменной #2
Потому что программе нужно выделить в памяти фиксированное количество. А если переменная не константная - то, естественно, она может измениться в ходе программы.
Если хотите массив с нефиксированным количеством элементов - диманические в помощь.
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 13:00  [ТС]     Статический массив, в котором количество элементов задаётся неконстантной переменной #3
Цитата Сообщение от Тамика Посмотреть сообщение
Потому что программе нужно выделить в памяти фиксированное количество. А если переменная не константная - то, естественно, она может измениться в ходе программы.
Если хотите массив с нефиксированным количеством элементов - диманические в помощь.
Да речь не о том вообще, я в курсе про динамические.
Приведённый код по идее вообще не должен компилироваться, но компилируется безо всякого писка и преспокойно работает. Вопрос - почему ?
TheFox
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
24.01.2014, 13:05     Статический массив, в котором количество элементов задаётся неконстантной переменной #4
Цитата Сообщение от mariko_11 Посмотреть сообщение
соответствует ли такое объявление массива стандарту?
А почему нет. Я вообще не пойму, что тут может смущать.
Цитата Сообщение от mariko_11 Посмотреть сообщение
как компиляторы обрабатывают сие?
Получает N и создает статический массив длинной N.
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
24.01.2014, 13:05     Статический массив, в котором количество элементов задаётся неконстантной переменной #5
Цитата Сообщение от mariko_11 Посмотреть сообщение
Да речь не о том вообще, я в курсе про динамические.
Приведённый код по идее вообще не должен компилироваться, но компилируется безо всякого писка и преспокойно работает. Вопрос - почему ?
Да, прошу прощения. Я сначала невнимательно прочитала, ответила, а потом перечитала и поняла, что херню сморозила.
TheFox
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
24.01.2014, 13:06     Статический массив, в котором количество элементов задаётся неконстантной переменной #6
Цитата Сообщение от mariko_11 Посмотреть сообщение
Вопрос - почему ?
Вам такой же вопрос, почему вы считаете, что он не должен компилироваться?
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
24.01.2014, 13:07     Статический массив, в котором количество элементов задаётся неконстантной переменной #7
Цитата Сообщение от TheFox Посмотреть сообщение
Вам такой же вопрос, почему вы считаете, что он не должен компилироваться?
Кстати, и правда интересно почему. У меня вот подобный код не компилируется.
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 13:09  [ТС]     Статический массив, в котором количество элементов задаётся неконстантной переменной #8
Цитата Сообщение от TheFox Посмотреть сообщение
А почему нет. Я вообще не пойму, что тут может смущать.
Потому что, етидрёна вошь, переменная не константная. Везде пишут: либо литерал, либо константную,третьего не дано, и подобные фокусы с неконстантными переменными называют неправильными, даже коды похожие приводят.

Цитата Сообщение от TheFox Посмотреть сообщение
Получает N и создает статический массив длинной N.
Размер статического массива должен быть известен ещё при компиляции.

Добавлено через 44 секунды
Цитата Сообщение от TheFox Посмотреть сообщение
Вам такой же вопрос, почему вы считаете, что он не должен компилироваться?
Дайте мне стенку. Пожааалуйста! Я об неё головой побьюсь.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
24.01.2014, 13:09     Статический массив, в котором количество элементов задаётся неконстантной переменной #9
Дело в том, что некоторые компиляторы это могутЬ, а некоторые нет. Сам вчера у Солтера прочитал.
Так что это вопрос не стандарта, а компилятора. Мой компилятор так не может.
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 13:11  [ТС]     Статический массив, в котором количество элементов задаётся неконстантной переменной #10
Цитата Сообщение от Тамика Посмотреть сообщение
Кстати, и правда интересно почему. У меня вот подобный код не компилируется.
Что используете?

Добавлено через 1 минуту
Цитата Сообщение от Ilot Посмотреть сообщение
Дело в том, что некоторые коммпиляторы это могутЬ, а некоторые нет. Сам вчера у Солтера прочитал.
А мона поточнее? У Солтера где?
И как они это могут - вот что интересно.

Вот я и говорю - непереносимый код, сиречь бяка на лопате. А меня тут спрашивают ещё, что смущаеть...
Extrim88
 Аватар для Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
24.01.2014, 13:14     Статический массив, в котором количество элементов задаётся неконстантной переменной #11
Цитата Сообщение от TheFox Посмотреть сообщение
Вам такой же вопрос, почему вы считаете, что он не должен компилироваться?
Потому что компилятор когда выполняет статическое связывание имени массива, должен уже "знать" сколько байт выделить под массив. Размерность же массива, пользователь вводит на этапе выполнения программы. Т.е. вышеуказанной информации в момент компиляции нет.
Тамика
Котовчанин
 Аватар для Тамика
860 / 440 / 129
Регистрация: 16.02.2010
Сообщений: 2,543
Записей в блоге: 27
24.01.2014, 13:14     Статический массив, в котором количество элементов задаётся неконстантной переменной #12
Цитата Сообщение от mariko_11 Посмотреть сообщение
Что используете?
Использую Студию 2010.
1>ClCompile:
1> N.cpp
1>c:\users\documents\visual studio 2010\projects\nss\nss\n.cpp(9): error C2057: expected constant expression
1>c:\users\documents\visual studio 2010\projects\nss\nss\n.cpp(9): error C2466: cannot allocate an array of constant size 0
1>c:\users\documents\visual studio 2010\projects\nss\nss\n.cpp(9): error C2133: 'mas' : unknown size
1>
1>Build FAILED.
TheFox
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
24.01.2014, 13:16     Статический массив, в котором количество элементов задаётся неконстантной переменной #13
Цитата Сообщение от mariko_11 Посмотреть сообщение
переменная не константная
Ну тогда у вас какой-то неправильный компилятор, который делает неправильный код
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
24.01.2014, 13:18     Статический массив, в котором количество элементов задаётся неконстантной переменной #14
Солтер Николас А. и др. С++ для профессионалов.
Миниатюры
Статический массив, в котором количество элементов задаётся неконстантной переменной  
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 13:20  [ТС]     Статический массив, в котором количество элементов задаётся неконстантной переменной #15
Цитата Сообщение от Ilot Посмотреть сообщение
Солтер Николас А. и др. С++ для профессионалов.
Блин, ну так и думала. Спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 13:24     Статический массив, в котором количество элементов задаётся неконстантной переменной
Еще ссылки по теме:

C++ создать статический массив строк как статический массив указателей на строки, задание ниже -->
C++ Массив: Удалить строку, в котором есть слово, имеющее наибольшее количество разных букв.
Нужно определить, есть ли в двумерном массиве столбец, в котором равное количество положительных и отрицательных элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TheFox
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
24.01.2014, 13:24     Статический массив, в котором количество элементов задаётся неконстантной переменной #16
Цитата Сообщение от Extrim88 Посмотреть сообщение
должен уже "знать" сколько байт выделить под массив.
При анализе, увидев далее cin можно просто забить парочку мегабайт
Yandex
Объявления
24.01.2014, 13:24     Статический массив, в котором количество элементов задаётся неконстантной переменной
Ответ Создать тему
Опции темы

Текущее время: 14:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru