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

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

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

Инициализация массива длинны N - C++

26.05.2012, 21:18. Просмотров 733. Ответов 9
Метки нет (Все метки)

Требуется задать массив с Энным количеством членов, n вводится с клавиатуры.
При попытке создания массива
C++ (Qt)
1
2
3
4
5
...
int n;
scanf("%d",&n);
А[n]
...
выдается ошибка "C2057: требуется константное выражение"
пробуем так:
C++ (Qt)
1
2
3
4
5
6
...
int n;
scanf("%d",&n);
int const g = n;
А[g]
...
снова ошибка "C2057: требуется константное выражение",
однако
C++ (Qt)
1
2
3
4
...
int const g = 10;
А[g]
...
работает корректно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация массива длинны N (C++):

Создание массива динамической длинны - C++
Раньше писал на C# а сейчас вот нужно на плюсах написать небольшую задачку, не могу создать массив определенной длинны.... короче *ret...

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

Разбитие массива на некое количество подмассивов одинаковой длинны - C++
Здравствуйте. Для решения моей основной задачи требуется разбитие массива на некое количество подмассивов одинаковой длинны. Проблема в...

инициализация массива - C++
Доброго времени. Инициализация массива с указанием размера 80 проходит гладко, при указании допустимого размера 12 выдает ошибку. Почему?

Инициализация массива - C++
int ** mas, n; cout << "Введите порядок треугольника паскаля: " << endl; cin >> n; mas = new int * ; for (int i = 0; i < n;...

Инициализация массива C++ - C++
Почему, если мы не инициализируем переменную, то при попытке работы с ней будет ошибка int main(){ char x; cout << x; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Catstail
Модератор
22541 / 10946 / 1775
Регистрация: 12.02.2012
Сообщений: 18,083
26.05.2012, 21:33 #2
Массив в переменными границами должен быть динамическим.

C++
1
2
3
4
5
6
int *Arr;
int n;
    
     scanf("%d",&n);
 
     Arr=new int[n];
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
26.05.2012, 21:43 #3
В сишном стиле:
C
1
2
3
4
int n;
scanf("%d",&n);
int *Arr = (int*) calloc (n,sizeof(int)); /* выделяем память */
free(Arr); /* освобождаем память*/
xLGSx
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 6
26.05.2012, 22:02  [ТС] #4
Цитата Сообщение от Catstail Посмотреть сообщение
Массив в переменными границами должен быть динамическим.

C++
1
2
3
4
5
6
int *Arr;
int n;
    
     scanf("%d",&n);
 
     Arr=new int[n];
Спасибо, все работает.
Сетевой Боб
1 / 1 / 0
Регистрация: 01.02.2013
Сообщений: 28
27.02.2013, 00:19 #5
Скажите пожалуйста, по какой причине массиву не удаётся присвоить значение после объявления переменной?

Например:

C++
1
2
3
4
char a[10] = "privet"; / - работает
 
char a[10];
a = "privet"; / - не работает
olya7
477 / 294 / 91
Регистрация: 18.02.2013
Сообщений: 684
27.02.2013, 00:23 #6
Цитата Сообщение от Сетевой Боб Посмотреть сообщение
char a[10] = "privet";
инициализация символьного массива при объявлении, если так не получилось сделать, то символы вводяться в массив посимвольно
Catstail
Модератор
22541 / 10946 / 1775
Регистрация: 12.02.2012
Сообщений: 18,083
27.02.2013, 10:45 #7
Цитата Сообщение от Сетевой Боб Посмотреть сообщение
по какой причине массиву не удаётся присвоить значение после объявления переменной
- по причине синтаксиса С/С++
а вот так:

C++
1
2
   char a[10];
   strcpy(a,"привет");
скорее всего, сработает.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
27.02.2013, 11:52 #8
Цитата Сообщение от Catstail Посмотреть сообщение
- по причине синтаксиса С/С++
При чем тут синтаксис. Просто после объявления массива, к примеру,
C++
1
int arr[5];
arr суть константа. Поэтому присвоить ей что-то нельзя. В то время, как область памяти по адресу - не является константной, если иное не оговорено при объявлении.
C++
1
const int arr[5] = { 0, 0, 0 };
Catstail
Модератор
22541 / 10946 / 1775
Регистрация: 12.02.2012
Сообщений: 18,083
27.02.2013, 12:16 #9
Цитата Сообщение от ITcrusader Посмотреть сообщение
При чем тут синтаксис. Просто после объявления массива, к примеру,
Код C++
1
int arr[5];
arr суть константа.
- это и есть синтаксис
aLarman
27.02.2013, 14:23     Инициализация массива длинны N
  #10

Не по теме:

Цитата Сообщение от ITcrusader Посмотреть сообщение
Просто после объявления массива, к примеру,

C++
1
int arr[5];
arr суть константа.
я бы поспорил насчет константности

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2013, 14:23
Привет! Вот еще темы с ответами:

Инициализация массива - C++
Здравствуйте! хм... сначала написал так. POINT p={00,00,10,10,10,10,10,10}; потом подумал, решил написать так. POINT...

Инициализация массива - C++
Нужно объявить несколько статических строк, содержащих байты со значениями в диапазоне от 1 до 255 Пытаюсь что-то в этом духе: ...

Инициализация массива - C++
Есть массив: int d; Есть константа бесконечности (просто константа) inf, равная 2^30. Я попытался проинициализировать массив этой...

Инициализация динамического массива - C++
Прога генерирует случайные числа(1-100) выводит их, пока не встретится 98, сохраняя все в массиве. Но мне нужно очень, чтобы программа сама...


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

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

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