Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 18:33   #11
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от PinaColada Посмотреть сообщение
Проверила, работает)
И вот на это
Код:
   ...
   int i, j=0, k=0, n=0, num, t=1;
   ...
   int array[num+1], array2[num+1];
   ...
транслятор ничего не сказал?!
Vago вне форума Ответить с цитированием
Старый 20.05.2010, 18:36   #12
PinaColada
Новичок
Джуниор
 
Аватар для PinaColada
 
Регистрация: 20.05.2010
Сообщений: 5
По умолчанию

Vago
нет, нормально заработало. а должна была ошибка выйти?
PinaColada вне форума Ответить с цитированием
Старый 20.05.2010, 18:50   #13
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Должна. num константой должно быть, определяемой на этапе трансляции. Иначе транслятор не знает, сколько места выделить статически под массивы. Каким Вы транслятором пользуетесь?
Vago вне форума Ответить с цитированием
Старый 20.05.2010, 19:19   #14
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я в VS2010Beta работаю.
Не надо на 2010 студии. Там С++0х.
Carbon вне форума Ответить с цитированием
Старый 20.05.2010, 19:26   #15
justso
Инженеришка
Форумчанин
 
Аватар для justso
 
Регистрация: 18.05.2010
Сообщений: 147
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
Должна. num константой должно быть, определяемой на этапе трансляции. Иначе транслятор не знает, сколько места выделить статически под массивы.
num не обязана быть константой. Юзер вводит длину массива, это и есть значение num. И только ПОСЛЕ этого мы даем массивам длину, которая на тот момент ИЗВЕСТНА УЖЕ.
Так что все правильно.

На мой взгляд хорошая экономия памяти и будет работать с массивами ЛЮБОЙ длины.
Ацко 342512564: Если по делу - то в случае острой необходимости. Если просто так - то в любое время.
justso вне форума Ответить с цитированием
Старый 20.05.2010, 19:58   #16
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от justso Посмотреть сообщение
Так что все правильно.
Простите, а Вы не могли бы мне показать то место в стандарте C, где написано, что декларация типа этой
Код:
int a[num];
(где num не является костантным выражением) является допустимой, и память под массив a[] будет выделена динамически? А то у меня M$VC 6 ругается. Хотя, может, я просто отстал от жизни...
Vago вне форума Ответить с цитированием
Старый 20.05.2010, 20:05   #17
justso
Инженеришка
Форумчанин
 
Аватар для justso
 
Регистрация: 18.05.2010
Сообщений: 147
По умолчанию

VS никогда не юзала так что не знаю. Нам сказали, что не имеет особой разницы, где указать длину, главное ее указать. Ну поменяйте на... ммм....
int array[1000], разве трабл?

Ругается в плане предупреждения или отказа от компиляции?
Ацко 342512564: Если по делу - то в случае острой необходимости. Если просто так - то в любое время.
justso вне форума Ответить с цитированием
Старый 20.05.2010, 20:21   #18
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Естественно, ошибка компиляции.

Конечно
Код:
int array[1000];
пройдёт, потому что 1000 - константа.

Ладно, придётся скачать ваш Bloodshed и посмотреть, что за код он строит...
Vago вне форума Ответить с цитированием
Старый 20.05.2010, 21:22   #19
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Хммм. gcc 4.4.3 вполне позволяет делать такое:
Код:
int v;
	
std::cin >> v;
int mass[ v ];
	
std::cout << sizeof( mass )/sizeof( int );
Причём результат совпадает с тем, что ввели. Хотя уверен, что многие компиляторы требуют именно константу.
Carbon вне форума Ответить с цитированием
Старый 20.05.2010, 21:43   #20
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Разобрался. Фича называется VLA (Variable Length Arrays), включена в стандарт C99. gcc поддерживает, начиная с версии 2.95. M$, по состоянию на начало 2008 г., не поддерживал и не собирался включать.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
Массив. delete Общие вопросы C/C++ 22 18.09.2009 10:38
Массив Hworang Паскаль, Turbo Pascal, PascalABC.NET 8 23.12.2008 22:50
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06