WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как правильно работать с массивами?SOS!

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как правильно работать с массивами?SOS!
dodger опубликован 23-10-2001 17:47 MSK   Click Here to See the Profile for dodger   Click Here to Email dodger  
Что-то я не могу понять, почему я не могу работать с массивами от неопределенного кол-ва, т.е.

int n;
int array[n];

Компилятор выкидывает ошибку, что могу работать только с константой. Это все хорошо, а если нужно задать кол-во элементов массива, что тогда делать?

В MSDN идет речь про какой-то subscription, что это такое?

Flex Ferrum опубликован 23-10-2001 17:55 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
В С/С++ нет реализованных на уровне языка массивов с переменным количеством элементов. Для этой цели обычно используют библиотечный класс vector.
server_mouse опубликован 23-10-2001 18:17 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Или указатель на тип. Создаёшь массив через new, убиваешь delete-ом.
DenizK опубликован 23-10-2001 22:24 MSK     Click Here to See the Profile for DenizK  Click Here to Email DenizK     
угу, нужно узать либо STLевские контейнеры vector, list, stack, etc. либо MFCшные аналоги CArray, CObArray, ...
cube опубликован 24-10-2001 01:08 MSK     Click Here to See the Profile for cube  Click Here to Email cube     
int n;
int *array = new int[n];

...

delete array;

какие проблемы?

cube опубликован 24-10-2001 01:10 MSK     Click Here to See the Profile for cube  Click Here to Email cube     
точнее

int n;
...
int *array = new int[n];
ну дальше все правильно

// спать пора

necer опубликован 24-10-2001 10:29 MSK     Click Here to See the Profile for necer  Click Here to Email necer     
....
delete[] array
server_mouse опубликован 24-10-2001 11:04 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Неужели так принципиально delete или delete[]?
cube опубликован 24-10-2001 11:30 MSK     Click Here to See the Profile for cube  Click Here to Email cube     
Принципиально, когда удаляется массив указателей но объекты, т.е.

CMyObject *o1 = new CMyObject();
CMyObject *o2 = new CMyObject[100];
...
delete o1;
delete[] o2;

кажется так.

Flex Ferrum опубликован 24-10-2001 12:27 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
2server_mouse: Если не хчешь иметь проблем с распределением памяти - то весьма принципиально.
m_fox опубликован 24-10-2001 17:04 MSK     Click Here to See the Profile for m_fox  Click Here to Email m_fox     
оператор delete[] , обозначает, что для каждого элемента надо вызвать деструктор

привыкни всегда использовать скобки, чтобы небыло больно потом :)

server_mouse опубликован 24-10-2001 18:02 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Но нафига мне деструкторы тех же char? Если не ошибаюсь компилятор их вообще не создаёт для ускорения работы, хотя с точки зрения идеологии ООП они есть.
Demo_S опубликован 25-10-2001 16:12 MSK     Click Here to See the Profile for Demo_S  Click Here to Email Demo_S     
Подводя итог:
int n;
//сдесь вводишь это n
// например cin>>n;
int *array=new int[n];
//работаешь с массивом
//for(int i=0;i<n;i++)array[i]=i;
//Удаляешь массив, чтобы память выделенную под него освободить
delete[] array;

P.S.Если работаешь с обычными массивами
int a[10];
то память освобождать не нужно.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.