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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
paramount2u
Сообщений: n/a
#1

динамические массивы в wxDev-C++ - C++

23.02.2010, 16:40. Просмотров 1242. Ответов 4
Метки нет (Все метки)

у меня такая проблема ... код
C++
1
2
3
4
5
6
7
8
    int n;
    cout<<"n=";
    cin>>n;
    char c[n];
    for (int i=0; i < n; i++){
        c[i]=i+48;
        cout<<c[i];
    }
в wxDev-C++ ( в GCC ) работает а вроде не должно ...
а в VS 2008 не компилируеться даже ...
ПОЧЕМУ ?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2010, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос динамические массивы в wxDev-C++ (C++):

Динамические массивы и функции. Динамические массивы. - C++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) - C++
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Динамические массивы. - C++
Помогите пожалуйста сделать задачку. В ней должно быть меню, и использованы динамические массивы. В меню 3 пункта: 1. Преобразуйте...

Динамические массивы - C++
Попытался поработать с дин. массивами, почему то ошибка появляется,может подскажете в чем проблема #include &quot;iostream&quot; using...

Динамические массивы - C++
Дана целочисленная матрица размером N. Найти сумму наименьших элементов ее нечетных строк и наибольших элементов ее четных строк. Нужно...

Динамические массивы - C++
Нужно создать массив из строк string, причем их количество заранее неизвестно (и вбить их значение заранее тоже нельзя). Кто-нибудь...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
23.02.2010, 16:45 #2
Цитата Сообщение от paramount2u Посмотреть сообщение
а в VS 2008 не компилируеться даже ...
В VS размер объявляемого массива должен быть константой, а иначе нужно будет выделять память динамически
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
23.02.2010, 17:15 #3
C++
1
2
3
4
5
6
7
8
    int n;
    cout<<"n=";
    cin>>n;
    char c[n];
    for (int i=0; i < n; i++){
        c[i]=i+48;
        cout<<c[i];
    }
заменить на
C++
1
2
3
4
5
6
7
8
    int n;
    cout<<"n=";
    cin>>n;
    char c[] = new char[n];
    for (int i=0; i < n; i++){
        c[i]=i+48;
        cout<<c[i];
    }
странно как GCC такое пропускает, у меня wxDev-C++ и он меня не раз на этом подстрекал..
paramount2u
Сообщений: n/a
23.02.2010, 23:15 #4
Во всех книгах ( которые читал ) пишут что размер объявляемого массива должен быть константой ( согласен ! память для массивов резервируется во время компиляции а не выполнения программы) и для создания динамических массивов используют специальные механизмы (массив создается в куче ) при помощи операторов new и delete .
внимание вопрос : а в GCC почему вообще нам нужны операторы new и delete или может чего то мы не понимаем ?

Добавлено через 10 минут
Цитата Сообщение от outoftime Посмотреть сообщение
char c[] = new char[n];
Между прочим так работать не будет нигде , надо писать
C++
1
char * c = new char[n];
easybudda
Модератор
Эксперт CЭксперт С++
9531 / 5524 / 932
Регистрация: 25.07.2009
Сообщений: 10,611
23.02.2010, 23:33 #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от paramount2u Посмотреть сообщение
Во всех книгах ( которые читал ) пишут что размер объявляемого массива должен быть константой
Вот кусок из "Полный справочник С" Шилдта:
Массивы переменной длины

В С89 размерности массивов необходимо объявлять при помощи выражений из целых констант, причем размер массива фиксируется во время компиляции. В силу определенных обстоятельств, в С99 это правило было изменено. В С99 можно объявить массив, размерности которого определяются любыми допустимыми целыми выражениями, в том числе и такими, значения которых становятся известны только во время выполнения. Такой массив называется массивом переменной длины (variable-length array, VLA). Однако такими массивами могут быть только локальные массивы (то есть те, у которых область видимости — прототип или блок). Вот пример массива переменной длины:

void f(int diml, int dim2)
{
int matrix[diml][dim2]; /* двумерный массив переменной длины */
/* ... */
}

В данном случае размер matrix определяется значениями, передаваемыми функции f() через переменные dim1 и dim2. Таким образом, в результате каждого вызова f() может получиться массив matrix с самыми разными измерениями.

Важно понять, что массивы переменной длины за время "своей жизни" не меняют своих размеров. (Иными словами, они не являются динамическими.) На самом деле массив переменной длины создается с другим размером каждый раз, когда встречается его объявление.

Можно указать массив переменной длины неуказанного размера, используя в качестве размера звездочку, *.

Появление массивов переменной длины вызвало небольшое изменение в операторе sizeof. Вообще говоря, sizeof — это оператор, который вычисляется во время компиляции. То есть во время компиляции он обычно превращается в целую константу, значение которой равно размеру типа или объекта. Однако если sizeof применяется к массиву переменной длины, то свое значение он получает только во время выполнения. Это изменение было необходимо потому, что размер массива переменной длины нельзя узнать до времени выполнения.

Одной из главных причин появления массивов переменной длины является желание упростить программирование численных методов. Конечно, это средство применяется довольно широко. Но помните — массивы переменной длины не поддерживаются Стандартом С89 (и в языке C++).
Учитывая последнее предложение - наверное gcc это, как конструкцию ANSI C 99 воспринимает, потому и не ругается...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2010, 23:33
Привет! Вот еще темы с ответами:

Динамические массивы - C++
1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать 2. Выполнить указанное в варианте...

динамические массивы - C++
Задали квадратную матрицу, все элементы которой равны единице. Написать функцию void func (int ** arr, int n), которая заполняет...

Динамические массивы - C++
Помогите сделать задание пожалуйста , люди. Никак не могу понять как это оживить это... Язык: С++ MS VS: Win32 Console...

Динамические массивы - C++
#include &lt;iostream&gt; using namespace std; int main() { int num; cout &lt;&lt; &quot;Ââåäèòå öåëîå ÷èñëî: &quot; &lt;&lt; num; int...


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

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

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