|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как правильно работать с массивами |
|
|
C/C++ - Как правильно работать с массивами
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Я новичек изучаю C++
У меня такой вопрос: как сначала вычеслить размер массива а потом его создать с вычесленным размером? int tmp = 2; const int tmp2 = tmp; int tmp3[tmp2]; Вроде все логично но компилятор ругается Что делаю не правильно? |
|
Отправлено: 16:46, 01-02-2008 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Здесь:
http://www.cplusplus.com/doc/tutorial/arrays.html или здесь: http://www.augustcouncil.com/~tgibson/tutorial/arr.html На что компилятор и какой ругается??? |
------- Отправлено: 19:56, 01-02-2008 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Может, инициализации константы через переменную ему не нравится?
|
Отправлено: 23:39, 01-02-2008 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Busla,
Может, здесь все хорошо const int tmp2 = tmp; А вот здесь он ругается что ожидает константу(tmp2) int tmp3[tmp2]; |
Отправлено: 20:41, 02-02-2008 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата oRaVeNo:
, Тоесть вообще бы убрал объявление: Массивы должны всегда быть инициализированны... Поправьте, если ошибся?! |
||
------- Отправлено: 22:13, 03-02-2008 | #5 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Дело в том что я незнаю размера своего массива.
Я должен вычеслить его размер, а потом про инициализировать массив с вычесленным размером и я не могу понять как это зделать. 1. Вычеслить размер могу. Заношу размер в tmp; 2. Размер массива должен быть константой, могу обьявляю const int tmp2 = tmp; 3. Обьявляю массив int tmp3[tmp2]; //и здесь компилятор ругается говорит что ожидает константное выражение tmp2 не пойму разве это не так? Я ж выше обьявил его константой. |
Отправлено: 00:09, 04-02-2008 | #6 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать oRaVeNo, компилятор какой????
Вы смотрели примеры объявления массивов в гугле? И сообщение об ошибке в оригинале приведите... |
------- Отправлено: 12:23, 04-02-2008 | #7 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Drongo, oRaVeNo, инициализирован - значит содержит значения.
Размерность массива должны быть известна на момент компиляции. Нужно либо выделять память под массив динамически и работать с указателями. Либо, коли речь идёт о C++, пользоваться стандартными библиотеками - там хватает средств для работы с множествами. |
Отправлено: 13:31, 04-02-2008 | #8 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Busla:
|
|
------- Отправлено: 17:12, 04-02-2008 | #9 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Глянь, можен пригодится, я такие варианты тебе набросал... Зачем его (размер) вычислять если у вас он в переменной tmp - тоесть - 2. Просто для вычисления будущих размеров используйте эту переменную - tmp. Только уберите строку
#include <iostream.h> #include <conio.h> void main() { int counter = 1; int const size = 10; // Я бы объявил размер массива так... int array[size] = {0}; // А так бы задал размерность массива... for(int i = 0; i < size; i++) cout<<" Element [ "<<i<<" ] = "<<array[i]<<endl; cout<<endl<<endl; // Динамический массив------------------------------------------------------ /*const*/ int size1; // Попробуйте убрать const int *Array; cout<<" Enter Size Array: "; cin>>size1; Array = new int[size1]; // Выделение через new for(int i = 0; i < size1; i++){ Array[i] = counter++; // Инициализация массива, какими-то значениями... cout<<" Element [ "<<i<<" ] = "<<Array[i]<<endl; } cout<<endl<<endl; // Ещё один вариан выделения через new--------------------------------------- const int size2 = 10; int *Array1 = new int[size2]; for(int i = 0; i < size2; i++){ Array1[i] = counter++; // Инициализация массива, какими-то значениями... cout<<" Element [ "<<i<<" ] = "<<Array1[i]<<endl; } cout<<endl<<endl; // Ваш случай--------------------------------------------------------------- //int tmp = 10; // Ваш размер массива хранится в переменной tmp2, если вам нужен размер, используйте эту переменную - tmp2; const int tmp2 = 10; // Изменяем tmp на tmp2, теперь размер массива константный... int tmp3[tmp2] = {0}; // Попробуйте без инициализации = {0}; for(int i = 0; i < tmp2; i++) cout<<" Element [ "<<i<<" ] = "<<tmp3[i]<<endl; getch(); } //--------------------------------------------------------------------------- |
------- Отправлено: 18:16, 04-02-2008 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Драйвер экрана nv4 disp прекратил правильно работать | Alex-furer | Видеокарты | 31 | 15-08-2013 11:09 | |
C/C++ - [решено] Лабораторная. Работа с массивами | Artem-Samsung | Программирование и базы данных | 6 | 01-06-2009 21:30 | |
[решено] скачал как бы образ фильма в папках,не знаю,как правильно записать | illusionmgs | Видео и аудио: обработка и кодирование | 9 | 12-09-2008 01:13 | |
Perl. Работа с массивами. | simon171078 | Вебмастеру | 2 | 09-01-2007 16:19 |
|