
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Сообщ.
#1
,
|
|
|
Привет, все!
Лектор заявил ц99 поддерживает динамические массивы. В смысле, такой код возможен: void f(int n) { char arr[n]; arr[2] = 1; // etc } main() { f(2); return 0; } А в каком это компилере? |
Сообщ.
#2
,
|
|||
|
ни в каком! он имел в виду new[],delete []
Добавлено в Ба недосмотрел! Нумерация в С99 от 0 до n-1. То есть в arr[2] от ты можешь обращаться 0 до 1. И arr[2]=1 у тя будет ошибкой. ЗЫ Надеюь нормально разъяснил, бо как-то полохо с формулировками. И лучше юзай стандартный шаблон std::Vector |
Сообщ.
#3
,
|
|
|
Ну, так какой конкретно копилер работает с этим?
VC5 и Борланд не могу заставит это скушать. |
Сообщ.
#4
,
|
|
|
никакой.
в стандарте нет такого char a[n]; где n - переменная. n может быть только константой, известной на момент компиляции. при этом такой массив размещается в области данных или стека проргаммы. динамичесикй это char* aa=new char[n]; ... delete[] aa; и он будет размещаться в куче. они (эти два способа) совсем разные, и по размещению, и по реализации. разве чтор аботать в программе с ними можно похоже ![]() |
Сообщ.
#5
,
|
|||
|
В стандарте С99 это наз-ся variable-length array (VLA). Вот например оттуда
Компилер, любой поддерживающий стандарт С99, у мня например Intel C 7.0... только там по дефолту С99 disabled, так что нужно явно указывать в параметрах компиляции -Qc99 |
Сообщ.
#6
,
|
|||
|
Там есть и определение(§6.7.5.2):
|
Сообщ.
#7
,
|
|
|
А вот в С++ это не поддерживается, как я понимаю?
|
Сообщ.
#8
,
|
|
|
Там для этого есть оператор new
|