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

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

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

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

23.02.2010, 16:40. Просмотров 1234. Ответов 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++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

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

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

Динамические массивы - C++
Составить программу, в которой 1)организовать ввод матрицы размера nxn из целых чисел; 2)вычислить минимальный элемент побочной...

Динамические массивы - C++
Добрый вечер, у меня в программе есть динамический массив, в котором, если записать туда &gt;20 элементов, все элементы перемешиваются, но...

Динамические массивы - C++
Если у меня есть 2 двумерных динамических массива один х1 размерностью m*n, а другой х2 размерностью m*(n+1), то что происходит с ними...

Динамические массивы - C++
Подскажите, как найти в одномерном динамическом массиве номер первого элемента, на котором произошла смена знака?(язык Си)

динамические массивы - C++
помогите разобраться с динамическими массивами . Надо составить программу которая: Изменяла порядок следования элементов массива на...

Динамические массивы - C++
Суть задания такова. Создается динамический массив А, заполняется элементами. Затем создается массив B, куда записываются все элементы...

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
23.02.2010, 16:45     динамические массивы в wxDev-C++ #2
Цитата Сообщение от paramount2u Посмотреть сообщение
а в VS 2008 не компилируеться даже ...
В VS размер объявляемого массива должен быть константой, а иначе нужно будет выделять память динамически
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
23.02.2010, 17:15     динамические массивы в wxDev-C++ #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     динамические массивы в wxDev-C++ #4
Во всех книгах ( которые читал ) пишут что размер объявляемого массива должен быть константой ( согласен ! память для массивов резервируется во время компиляции а не выполнения программы) и для создания динамических массивов используют специальные механизмы (массив создается в куче ) при помощи операторов new и delete .
внимание вопрос : а в GCC почему вообще нам нужны операторы new и delete или может чего то мы не понимаем ?

Добавлено через 10 минут
Цитата Сообщение от outoftime Посмотреть сообщение
char c[] = new char[n];
Между прочим так работать не будет нигде , надо писать
C++
1
char * c = new char[n];
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
23.02.2010, 23:33     динамические массивы в wxDev-C++ #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 воспринимает, потому и не ругается...
Yandex
Объявления
23.02.2010, 23:33     динамические массивы в wxDev-C++
Ответ Создать тему
Опции темы

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