Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как правильно работать с массивами

Ответить
Настройки темы
C/C++ - Как правильно работать с массивами

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я новичек изучаю C++
У меня такой вопрос: как сначала вычеслить размер массива а потом его создать с вычесленным размером?
int tmp = 2;
const int tmp2 = tmp;
int tmp3[tmp2];
Вроде все логично но компилятор ругается
Что делаю не правильно?

Отправлено: 16:46, 01-02-2008

 

Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


Здесь:
http://www.cplusplus.com/doc/tutorial/arrays.html
или здесь:
http://www.augustcouncil.com/~tgibson/tutorial/arr.html

На что компилятор и какой ругается???

-------
black-eric.livejournal.com


Отправлено: 19:56, 01-02-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Может, инициализации константы через переменную ему не нравится?

Отправлено: 23:39, 01-02-2008 | #3


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Busla,
Может, здесь все хорошо const int tmp2 = tmp;
А вот здесь он ругается что ожидает константу(tmp2) int tmp3[tmp2];

Отправлено: 20:41, 02-02-2008 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата oRaVeNo:
PHP код: Выделить весь код

int tmp 2;  // это бы я убрал...

const int tmp2 tmp// А здесь вместо [b]tmp[/b] присвоил размер = 2;
int tmp3[tmp2]; 

»
Почему так? Ведь тут несколько раз переприсвоение. Я бы сделал так
PHP код: Выделить весь код

const int tmp2 2;

int tmp3[tmp2] = {0};  // Инициалиация нулями 

,
Тоесть вообще бы убрал объявление:
PHP код: Выделить весь код

int tmp 2

Массивы должны всегда быть инициализированны... Поправьте, если ошибся?!

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 22:13, 03-02-2008 | #5


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Дело в том что я незнаю размера своего массива.
Я должен вычеслить его размер, а потом про инициализировать массив с вычесленным размером и я не могу понять как это зделать.
1. Вычеслить размер могу. Заношу размер в tmp;
2. Размер массива должен быть константой, могу обьявляю const int tmp2 = tmp;
3. Обьявляю массив int tmp3[tmp2]; //и здесь компилятор ругается говорит что ожидает константное выражение tmp2 не пойму разве это не так? Я ж выше обьявил его константой.

Отправлено: 00:09, 04-02-2008 | #6


Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


oRaVeNo, компилятор какой????
Вы смотрели примеры объявления массивов в гугле?
И сообщение об ошибке в оригинале приведите...

-------
black-eric.livejournal.com


Отправлено: 12:23, 04-02-2008 | #7


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Drongo, oRaVeNo, инициализирован - значит содержит значения.

Размерность массива должны быть известна на момент компиляции.
Нужно либо выделять память под массив динамически и работать с указателями. Либо, коли речь идёт о C++, пользоваться стандартными библиотеками - там хватает средств для работы с множествами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:31, 04-02-2008 | #8


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Busla:
Drongo, oRaVeNo, инициализирован - значит содержит значения. »
Так у парня небыл он даже инициализирован, а по поводу, размера, то я согласен, наверное плохо выразил свою мысль...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 17:12, 04-02-2008 | #9


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Глянь, можен пригодится, я такие варианты тебе набросал... Зачем его (размер) вычислять если у вас он в переменной tmp - тоесть - 2. Просто для вычисления будущих размеров используйте эту переменную - tmp. Только уберите строку
Код: Выделить весь код
const int tmp2 = tmp;
Код: Выделить весь код
int tmp3[tmp2];  // а здесь смените вместо tmp2 на tmp; int tmp3[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();
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:16, 04-02-2008 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Как правильно работать с массивами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Драйвер экрана 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




 
Переход