Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 14:46     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #1
Ситуация простая. Язык С++. Есть функция, пусть будет 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;}
компилятор ругается.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 14:46     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1?
Посмотрите здесь:

динамический массив структур qwer заданного пользователем размера C++
Можно ли создать функцию, принимающую двумерный массив произвольного размера? C++
C++ Можно ли передать в функцию массив произвольного размера ?
C++ Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Вованя
116 / 116 / 46
Регистрация: 20.02.2014
Сообщений: 409
21.02.2014, 14:48     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #2
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
21.02.2014, 14:49     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #3
Размер массива должен быть константой этапа компиляции.
В данном случае память нужно выделять динамически (см new)
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 14:51  [ТС]     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #4
Всех благодарю. Ясно.)
THE--MASTER
Заблокирован
21.02.2014, 14:51     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #5
Цитата Сообщение от JJsmall Посмотреть сообщение
компилятор ругается.
правильно, что ругается, т.к. какой размер массива ты засунешь в функцию никто кроме тебя не знает - по этому он не может заранее рассчитать, сколько тебе потребуется памяти. Статический массив помжно создать только определённого заранее известного размера
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
21.02.2014, 14:54     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #6
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
THE--MASTER
Заблокирован
21.02.2014, 15:00     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #7
Цитата Сообщение от castaway Посмотреть сообщение
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
это булщит, не слушайте его

В таком стиле прогать - ошибок не оберёшься.
А вообще то: C++14 will support variable-length arrays
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 15:12  [ТС]     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #8
Вновь всем спс.)
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
21.02.2014, 15:19     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #9
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно.
а интересно почему нельзя в С++
DrOffset
6443 / 3817 / 885
Регистрация: 30.01.2014
Сообщений: 6,611
21.02.2014, 15:25     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #10
Цитата Сообщение от ValeryS Посмотреть сообщение
а интересно почему нельзя в С++
По стандарту же
Технических ограничений кроме размера стека - нет
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
21.02.2014, 16:00     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #11
Цитата Сообщение от DrOffset Посмотреть сообщение
По стандарту же
что по стандарту?

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Технических ограничений кроме размера стека - нет
а кто то речь про стек ведет?
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет?
DrOffset
6443 / 3817 / 885
Регистрация: 30.01.2014
Сообщений: 6,611
21.02.2014, 16:07     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #12
Цитата Сообщение от ValeryS Посмотреть сообщение
что по стандарту?
Мне кажется ты совсем не разобрался о чем вообще речь

Речь про массивы с неконстантным размером:
C++
1
int a[n];
где n - переменная.
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
И такой массив создается на стеке.
Аналог - функция alloca.
Вованя
116 / 116 / 46
Регистрация: 20.02.2014
Сообщений: 409
21.02.2014, 16:28     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #13
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от Вованя
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет
Зачем читаешь между строк и при этом пытаешься "подловить" глупыми наводящими вопросами о куче?
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
21.02.2014, 16:44     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #14
Цитата Сообщение от Вованя Посмотреть сообщение
Зачем читаешь между строк и при этом пытаешься "подловить"
кто пытается подловить?
перечитай еще раз свое сообщение
из него следует что динамическое выделение возможно в Си, а в плюсах нет
Цитата Сообщение от DrOffset Посмотреть сообщение
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
у меня из Си компиляторов только Keil и он такую конструкцию не переваривает
спасибо, буду знать
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.02.2014, 16:52     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #15
А какая у тебя студия? Файл с расширением .c пробовал компилировать? На "переменные массивы" продолжает ругаться?
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
21.02.2014, 16:52     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #16
К сожалению, не все компиляторы соответствуют Стандарту.
Вованя
116 / 116 / 46
Регистрация: 20.02.2014
Сообщений: 409
21.02.2014, 17:02     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #17
Цитата Сообщение от ValeryS Посмотреть сообщение
кто пытается подловить?
Тогда приношу извинения, воспринял за выпад, ибо читать такое явно не от новичка по крайней мере странно.
Мое сообщение - это ответ на вопрос ТС, и если не выдергивать из контекста, то все укладывается
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
21.02.2014, 17:04     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #18
Цитата Сообщение от Вованя Посмотреть сообщение
Тогда приношу извинения, воспринял за выпад,
ладно, проехали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 17:23     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1?
Еще ссылки по теме:

Передача параметров функциям. Можно ли изменить этот параметр внутри функции C++
Как создать массив большого размера C++
C++ Создать класс CMatrix, описывающий объект – действительные матрицы заданного размера

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

Или воспользуйтесь поиском по форуму:
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 17:23  [ТС]     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? #19
Kuzia domovenok, 6ая. Не пробовал. Да и смысла нет. Так то я знал, что работать с "переменными" массивами в с++ можно через указатели и векторы. Но не понятно было почему не работает в функции, которой уж передали значение. То есть фактически значение есть, и оно не переменное. Но выше объяснили, что размер должен быть константой уже в момент компиляции, а не процессе исполнения) Так что вопрос закрыт был сразу)

p.s. а тему закрыть может только админ?
Yandex
Объявления
21.02.2014, 17:23     Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1?
Ответ Создать тему
Опции темы

Текущее время: 19:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru