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

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

Войти
Регистрация
Восстановить пароль
 
Wagroux
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 4
#1

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

04.05.2014, 12:21. Просмотров 361. Ответов 8
Метки нет (Все метки)

Добрый день!
Помогите, пожалуйста, разобраться вот с этим кодом:
C++
1
2
3
4
5
6
#include <iostream>
using namespace std;
main () {
int x;
cin >> x;
int array [x]; }
Почему этот код компилируется и выполняется? Разве при объявлении размер массива не должен быть задан константой?
Это что, какой-то новый стандарт? (компилятор g++)
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 12:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статический массив неопределенного размера (C++):

Статический массив большого размера - C++
Здраствуйте, скорее всего данная проблема у многих есть, этот код вызывает ошибку на этапе исполнения #include &lt;windows.h&gt; int...

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

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

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во - C++
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны...

Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: - C++
Помогите решить задачу на языке с++ Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу: элемент...

Двумерный массив (поменять статический массив на динамический) - C++
Нужно поменять статический массив на динамический с выделением памяти #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; ...

8
Jewbacabra
Эксперт PHP
2546 / 2138 / 802
Регистрация: 24.04.2014
Сообщений: 6,279
04.05.2014, 12:26 #2
Это особенность данного компилятора. Попробуйте добавить флаг -pedantic, должно перестать компилироваться.
0
Wagroux
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 4
04.05.2014, 12:32  [ТС] #3
Большое спасибо))
-pedantic выдает, конечно, warning-сообщение, но все равно код компилируется.
Вообще странная особенность - компилятор же выделяет память, основываясь на константе или константном выражении.
Что происходит здесь - непонятно))
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
04.05.2014, 16:43 #4
Цитата Сообщение от Wagroux Посмотреть сообщение
непонятно
RTFM!

Variable-length array
5.16 Arrays of Variable Length
GCC и Variable-Length Arrays
1
Wagroux
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 4
04.05.2014, 18:30  [ТС] #5
Большое спасибо за ссылки.
Еще вопрос по теме: правильно ли использовать такие массивы или же это дурновкусие и нужно работать с динамическими?
0
gazlan
3132 / 1908 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
04.05.2014, 18:56 #6
Это "дешевая" память, выделяемая на стеке. Соответственно, (де)аллокация происходит быстро, но размер ограничен остатком стека. Память, выделяемая из хипа "дороже", но там ее больше :-)

Ну, и вопросы переносимости - компилятор должен поддерживать эту версию стандарта (или его расширение).
0
noname_club
103 / 94 / 10
Регистрация: 01.05.2013
Сообщений: 598
04.05.2014, 19:35 #7
#include <iostream>
using namespace std;
main () {
int x;
cin >> x;
int array [x]; }
ИМХО говнокод
Динамический массив должен быть объявлен как положено (malloc, vector и прочее) а не маскироваться под статический массив.

И еще одно, массив в СИ языке всегда указатель на первый элемент, лучше объявлять массив ввиде указателя.

то есть объявление массива это нечто вроде

C++
1
2
3
4
5
6
7
8
9
10
11
main () {
int x;
cin >> x;
 
int * z = malloc(sizeof(int)*x);
 
// << работаем с массивом
 
free(z); // << особождаем память
 
}
0
Wagroux
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 4
04.05.2014, 20:23  [ТС] #8
Это все понятно, я приводил изначально пример только потому, что не знал о возможности объявлять так массивы.
Мне бы хотелось узнать, почему вы в коде С++ используете старую функцию malloc()? А не new()?
Заранее спасибо)
0
ValeryS
Модератор
6652 / 5061 / 470
Регистрация: 14.02.2011
Сообщений: 16,924
04.05.2014, 20:34 #9
Wagroux,
посмотри эту тему
кое-что про const
там Evg популярно объяснил почему и где это сработает
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 20:34
Привет! Вот еще темы с ответами:

Переделать динамический массив на статический массив - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int dim, counter_1 = 1, counter_2 =...

Статический массив - C++
Привет ВСЕММММ)))Помогите с написанием кода,чет я торможу((( Водномерном массиве,состоящем из n вещественных элементов,вычислить: ...

статический массив - C++
В одномерном статическом массиве состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, больших С; 2)...

Статический двумерный массив - C++
Данная двумерная матрица действительных чисел А . Необходимо получить двумерный массив B путем поворота первого против часовой стрелки. ...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
04.05.2014, 20:34
Ответ Создать тему
Опции темы

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