0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
1

Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1?

21.02.2014, 14:46. Показов 735. Ответов 18
Метки нет (Все метки)

Ситуация простая. Язык С++. Есть функция, пусть будет f_1, которая получает аргумент n_1, натурального типа. Вопрос такой: внутри функции f_1 невозможно создание массива размера заданного аргументом n_1? Без указателей и векторов.

Например, так:
C++
1
2
3
int f_1(unsigned int n_1)
 { int arr_1[n_1];
return 0;}
компилятор ругается.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2014, 14:46
Ответы с готовыми решениями:

Создать двумерный динамический массив заданного пользователем размера
Нужно создать массив (ну пусть М). Вот как объявить этот массив, чтобы пользователь затем сам...

Можно ли создать массив размера 10^20?
Возможно ли создать массив такого размера?

Можно ли создать функцию, принимающую двумерный массив произвольного размера?
Добрый вечер всем. Я прочитал в книге в главе Передача двумерных массивов в функцию следующую...

Как можно создать массив разных объектов, заранее неизвестного размера?
если нужно создать несколько однотипных объектов программно то один скажем, создается кодом myobj:...

18
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
21.02.2014, 14:48 2
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.02.2014, 14:49 3
Размер массива должен быть константой этапа компиляции.
В данном случае память нужно выделять динамически (см new)
1
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 14:51  [ТС] 4
Всех благодарю. Ясно.)
0
Заблокирован
21.02.2014, 14:51 5
Цитата Сообщение от JJsmall Посмотреть сообщение
компилятор ругается.
правильно, что ругается, т.к. какой размер массива ты засунешь в функцию никто кроме тебя не знает - по этому он не может заранее рассчитать, сколько тебе потребуется памяти. Статический массив помжно создать только определённого заранее известного размера
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
21.02.2014, 14:54 6
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
0
Заблокирован
21.02.2014, 15:00 7
Цитата Сообщение от castaway Посмотреть сообщение
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
это булщит, не слушайте его

В таком стиле прогать - ошибок не оберёшься.
А вообще то: C++14 will support variable-length arrays
0
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 15:12  [ТС] 8
Вновь всем спс.)
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
21.02.2014, 15:19 9
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно.
а интересно почему нельзя в С++
0
16079 / 8681 / 2120
Регистрация: 30.01.2014
Сообщений: 14,960
21.02.2014, 15:25 10
Цитата Сообщение от ValeryS Посмотреть сообщение
а интересно почему нельзя в С++
По стандарту же
Технических ограничений кроме размера стека - нет
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
21.02.2014, 16:00 11
Цитата Сообщение от DrOffset Посмотреть сообщение
По стандарту же
что по стандарту?

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Технических ограничений кроме размера стека - нет
а кто то речь про стек ведет?
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет?
0
16079 / 8681 / 2120
Регистрация: 30.01.2014
Сообщений: 14,960
21.02.2014, 16:07 12
Цитата Сообщение от ValeryS Посмотреть сообщение
что по стандарту?
Мне кажется ты совсем не разобрался о чем вообще речь

Речь про массивы с неконстантным размером:
C++
1
int a[n];
где n - переменная.
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
И такой массив создается на стеке.
Аналог - функция alloca.
1
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
21.02.2014, 16:28 13
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от Вованя
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет
Зачем читаешь между строк и при этом пытаешься "подловить" глупыми наводящими вопросами о куче?
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
21.02.2014, 16:44 14
Цитата Сообщение от Вованя Посмотреть сообщение
Зачем читаешь между строк и при этом пытаешься "подловить"
кто пытается подловить?
перечитай еще раз свое сообщение
из него следует что динамическое выделение возможно в Си, а в плюсах нет
Цитата Сообщение от DrOffset Посмотреть сообщение
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
у меня из Си компиляторов только Keil и он такую конструкцию не переваривает
спасибо, буду знать
0
3652 / 2989 / 828
Регистрация: 25.03.2012
Сообщений: 11,023
Записей в блоге: 1
21.02.2014, 16:52 15
А какая у тебя студия? Файл с расширением .c пробовал компилировать? На "переменные массивы" продолжает ругаться?
0
Эксперт С++
2924 / 1273 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.02.2014, 16:52 16
К сожалению, не все компиляторы соответствуют Стандарту.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
21.02.2014, 17:02 17
Цитата Сообщение от ValeryS Посмотреть сообщение
кто пытается подловить?
Тогда приношу извинения, воспринял за выпад, ибо читать такое явно не от новичка по крайней мере странно.
Мое сообщение - это ответ на вопрос ТС, и если не выдергивать из контекста, то все укладывается
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
21.02.2014, 17:04 18
Цитата Сообщение от Вованя Посмотреть сообщение
Тогда приношу извинения, воспринял за выпад,
ладно, проехали
0
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 17:23  [ТС] 19
Kuzia domovenok, 6ая. Не пробовал. Да и смысла нет. Так то я знал, что работать с "переменными" массивами в с++ можно через указатели и векторы. Но не понятно было почему не работает в функции, которой уж передали значение. То есть фактически значение есть, и оно не переменное. Но выше объяснили, что размер должен быть константой уже в момент компиляции, а не процессе исполнения) Так что вопрос закрыт был сразу)

p.s. а тему закрыть может только админ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 17:23
Помогаю со студенческими работами здесь

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же...

Различные функции, для которых можно создать массив указателей на функции
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

Построить совокупность п занумерованных горизонтально расположенных квадратов заданного размера (номера внутри
Кто разбирается, помогите пожалуйста, нужно сдать срочно лабораторную работу! Сам вообще не понимаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru