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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
#1

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

24.01.2014, 12:47. Просмотров 598. Ответов 15
Метки нет (Все метки)

Почему такое вообще катит ?
Что говорит стандарт на эту тему?

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. Даже предупреждений не выдаётся.
Посему вопросы:
а) соответствует ли такое объявление массива стандарту?
б) если нет, то как компиляторы обрабатывают сие?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 12:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статический массив, в котором количество элементов задаётся неконстантной переменной (C++):

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> - C++
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

создать статический массив строк как статический массив указателей на строки, задание ниже --> - C++
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова...

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

Создать статический массив на 10 элементов и заполнить его случайными числами из диапазона [0;5] - C++
Знает кто-то, как решить задачу на С++? Создать статический массив на 10 элементов и заполнить его случайными числами из диапазона ....

Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 - C++
Дан массив целых чисел. Определить количество четных элементов и количество элементов, оканчивающихся на цифру 5 с++

Одномерный массив. Найти и напечатать количество чётных элементов и количество нечётных элементов - C++
массив F задан случайными числами в диапазоне от -30 до 20. найти и напечатать количество чётных элементов и количество нечётных...

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

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

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

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

Вот я и говорю - непереносимый код, сиречь бяка на лопате. А меня тут спрашивают ещё, что смущаеть...
0
Extrim88
50 / 50 / 11
Регистрация: 08.02.2013
Сообщений: 189
24.01.2014, 13:14 #11
Цитата Сообщение от TheFox Посмотреть сообщение
Вам такой же вопрос, почему вы считаете, что он не должен компилироваться?
Потому что компилятор когда выполняет статическое связывание имени массива, должен уже "знать" сколько байт выделить под массив. Размерность же массива, пользователь вводит на этапе выполнения программы. Т.е. вышеуказанной информации в момент компиляции нет.
0
Тамика
Котовчанин
912 / 455 / 145
Регистрация: 16.02.2010
Сообщений: 3,144
Записей в блоге: 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.
0
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 437
24.01.2014, 13:16 #13
Цитата Сообщение от mariko_11 Посмотреть сообщение
переменная не константная
Ну тогда у вас какой-то неправильный компилятор, который делает неправильный код
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
24.01.2014, 13:18 #14
Солтер Николас А. и др. С++ для профессионалов.
0
Миниатюры
Статический массив, в котором количество элементов задаётся неконстантной переменной  
mariko_11
2 / 2 / 1
Регистрация: 11.03.2013
Сообщений: 64
24.01.2014, 13:20  [ТС] #15
Цитата Сообщение от Ilot Посмотреть сообщение
Солтер Николас А. и др. С++ для профессионалов.
Блин, ну так и думала. Спасибо.
0
24.01.2014, 13:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2014, 13:20
Привет! Вот еще темы с ответами:

Массив, в котором возможна нумерация элементов не с нуля - C++
Нужно написать класс, описывающий массив со смещенной нумерацией элементов (в котором возможна нумерация не только с 0, но и с 1, 3, -6 и...

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

Нужно определить, есть ли в двумерном массиве столбец, в котором равное количество положительных и отрицательных элементов - C++
Нужно определить, есть ли в двумерном массиве столбец, в котором равное количество положительных и отрицательных элементов и вывести их...

Найти номер столбца массива размером МхN, в котором находится наибольшее количество элементов, кратных 5 - C++
Можете помочь. &quot;Найти номер столбца массива размером МхN, в котором находится наибольшее количество элементов, кратных 5. Элементы задаются...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru