Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические масивы????? просьба не перемещать тему... 
:(
    Опции темы
WaReZMEN
Дата 17.10.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Думал я что все с ними просто :(
Попробовал написать нечто такое

Код

   int N;    
   cout << "input N=" ;
   cin >> N; 

   int x[N];


    
Но так не работает так мне сделать чтоб заработало??? нужен именно масив указатели не прокатывают :(  smile 
PM MAIL ICQ   Вверх
Prehistorik
Дата 17.10.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: 1
Всего: 3



Дело в том, что статистический массив не может быть объявлен динамической длины. Это раз.
Второе - а разницы между массивом и указателем нет почти никакой. Чем объясняется такая категоричность?!
Ну и третье. Можно сделаьть что-то типа Массива максимальной длины и потом в нем хранить столько ячеек, сколько надо. Но это некрасивое и несишное решение.
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
MAKCim
Дата 17.10.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Prehistorik @  17.10.2007,  12:38 Найти цитируемый пост)
Дело в том, что статистический массив не может быть объявлен динамической длины

это смотря в каком стандарте  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Prehistorik
Дата 17.10.2007, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 30.5.2006
Где: СПб

Репутация: 1
Всего: 3



Цитата(MAKCim @ 17.10.2007,  12:58)
Цитата(Prehistorik @  17.10.2007,  12:38 Найти цитируемый пост)
Дело в том, что статистический массив не может быть объявлен динамической длины

это смотря в каком стандарте  smile

Поясни
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
Timok
Дата 17.10.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.10.2007

Репутация: нет
Всего: нет



мб - 
Код
int N;    
cout << "input N=" ;
cin >> N; 
int *x;
x = new int[ N ];

?
PM MAIL   Вверх
powerfox
Дата 17.10.2007, 13:08 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(Prehistorik @  17.10.2007,  13:38 Найти цитируемый пост)
Дело в том, что статистический массив не может быть объявлен динамической длины. Это раз.

Можно объявлять его с помощью константы, инициализированной переменной N.
Цитата(Prehistorik @  17.10.2007,  13:38 Найти цитируемый пост)
Ну и третье. Можно сделаьть что-то типа Массива максимальной длины и потом в нем хранить столько ячеек, сколько надо. Но это некрасивое и несишное решение. 

Раз человек пишет на С++, то лучше использовать vector.
Или же объявлять массив с помощью константы, как я написал выше.

Есть ещё вариант с использованием другого компилятора (или указания другого стандарта). g++ у меня всё компилирует (странно, что даже и при указании -std=с++98).

Добавлено через 1 минуту и 23 секунды
Цитата(Timok @  17.10.2007,  14:08 Найти цитируемый пост)
int *x;
x = new int[ N ];

Смысл? Чтобы потом ещё и delete добавить?


--------------------
user posted image
PM WWW   Вверх
akizelokro
Дата 17.10.2007, 13:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



int * pint = new int[N];
pint[5] = 10;
N = pint[5];
delete pint;


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
WaReZMEN
Дата 17.10.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Спасибо всем!!!!
PM MAIL ICQ   Вверх
UnrealMan
Дата 17.10.2007, 13:50 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Ну и советчики smile
У одного

Цитата(Prehistorik @  17.10.2007,  13:38 Найти цитируемый пост)
разницы между массивом и указателем нет почти никакой

у другого

Цитата(powerfox @  17.10.2007,  14:08 Найти цитируемый пост)
Можно объявлять его с помощью константы, инициализированной переменной N.

у третьего

Цитата(akizelokro @  17.10.2007,  14:10 Найти цитируемый пост)
int * pint = new int[N];
pint[5] = 10;
N = pint[5];
delete pint; 

Хороший форум smile
Интересно, в других разделах тоже такие же знатоки? А то, может, и мне когда-нибудь совет понадобится (в вопросе, где я плохо разбираюсь). Вот уж не хотелось бы на таких спецов нарваться...

PM MAIL   Вверх
akizelokro
Дата 17.10.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Цитата

Интересно, в других разделах тоже такие же знатоки?

Прошу прощения за обычную небрежность. Ваша критика по делу и по месту.
Код

delete [] pint;

Случаи, когда N<5, я не стал рассматривать из-за обычной лени.



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
powerfox
Дата 17.10.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(UnrealMan @  17.10.2007,  14:50 Найти цитируемый пост)
Ну и советчики smile


Цитата(UnrealMan @  17.10.2007,  14:50 Найти цитируемый пост)
Цитата(powerfox @  17.10.2007,  14:08 Найти цитируемый пост)
Можно объявлять его с помощью константы, инициализированной переменной N.

у третьего

Вам не составит труда объяснить, что в моих словах неверно? ;)



--------------------
user posted image
PM WWW   Вверх
Daevaorn
Дата 17.10.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(powerfox @  17.10.2007,  15:19 Найти цитируемый пост)
Вам не составит труда объяснить, что в моих словах неверно? ;)

Код

int a;
const int b = a;
int c[ b ];

это нормально?

Это сообщение отредактировал(а) Daevaorn - 17.10.2007, 14:36
PM MAIL WWW   Вверх
UnrealMan
Дата 17.10.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(powerfox @  17.10.2007,  15:19 Найти цитируемый пост)
Вам не составит труда объяснить, что в моих словах неверно? ;)

Переменной можно инициализировать константный объект, но не константу (которую можно было бы использовать в качестве константного выражения).

PM MAIL   Вверх
MAKCim
Дата 17.10.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Prehistorik @  17.10.2007,  13:01 Найти цитируемый пост)
Поясни 

C99


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
powerfox
Дата 17.10.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Виноват, был не прав. Не всякая константа подходит под определение константного выражения. Ещё и g++ подвёл:
Цитата

fox@fox-pfx:~/programming/C++$ g++ -std=c++98 dyn_arr.cpp
fox@fox-pfx:~/programming/C++$ g++ -std=c++98 -pedantic dyn_arr.cpp
dyn_arr.cpp: In function ‘int main()’:
dyn_arr.cpp:5: ошибка: ISO C++ запрещает массив переменного размера ‘array’
fox@fox-pfx:~/programming/C++$


UnrealMan, извиняюсь за наезд, вы были абсолютно правы. Заходите к нам в Linux/Unix, там у нас порядок smile


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0656 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.