Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
#1

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

21.02.2014, 14:46. Просмотров 485. Ответов 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;}
компилятор ругается.
http://www.cyberforum.ru/cpp-beginners/thread1346563.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 14:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли внутри функции f_1 создать массив размера, заданного аргументом n_1? (C++):

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

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

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

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

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

18
Вованя
137 / 134 / 63
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
21.02.2014, 14:48 #2
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
21.02.2014, 14:49 #3
Размер массива должен быть константой этапа компиляции.
В данном случае память нужно выделять динамически (см new)
1
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 14:51  [ТС] #4
Всех благодарю. Ясно.)
0
THE--MASTER
Заблокирован
21.02.2014, 14:51 #5
Цитата Сообщение от JJsmall Посмотреть сообщение
компилятор ругается.
правильно, что ругается, т.к. какой размер массива ты засунешь в функцию никто кроме тебя не знает - по этому он не может заранее рассчитать, сколько тебе потребуется памяти. Статический массив помжно создать только определённого заранее известного размера
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
21.02.2014, 14:54 #6
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
0
THE--MASTER
Заблокирован
21.02.2014, 15:00 #7
Цитата Сообщение от castaway Посмотреть сообщение
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
это булщит, не слушайте его

В таком стиле прогать - ошибок не оберёшься.
А вообще то: C++14 will support variable-length arrays
0
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 15:12  [ТС] #8
Вновь всем спс.)
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
21.02.2014, 15:19 #9
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно.
а интересно почему нельзя в С++
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
21.02.2014, 15:25 #10
Цитата Сообщение от ValeryS Посмотреть сообщение
а интересно почему нельзя в С++
По стандарту же
Технических ограничений кроме размера стека - нет
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
21.02.2014, 16:00 #11
Цитата Сообщение от DrOffset Посмотреть сообщение
По стандарту же
что по стандарту?

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

Речь про массивы с неконстантным размером:
C++
1
int a[n];
где n - переменная.
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
И такой массив создается на стеке.
Аналог - функция alloca.
1
Вованя
137 / 134 / 63
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
21.02.2014, 16:28 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от Вованя
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет
Зачем читаешь между строк и при этом пытаешься "подловить" глупыми наводящими вопросами о куче?
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
21.02.2014, 16:44 #14
Цитата Сообщение от Вованя Посмотреть сообщение
Зачем читаешь между строк и при этом пытаешься "подловить"
кто пытается подловить?
перечитай еще раз свое сообщение
из него следует что динамическое выделение возможно в Си, а в плюсах нет
Цитата Сообщение от DrOffset Посмотреть сообщение
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
у меня из Си компиляторов только Keil и он такую конструкцию не переваривает
спасибо, буду знать
0
Kuzia domovenok
2208 / 1977 / 440
Регистрация: 25.03.2012
Сообщений: 6,930
Записей в блоге: 1
21.02.2014, 16:52 #15
А какая у тебя студия? Файл с расширением .c пробовал компилировать? На "переменные массивы" продолжает ругаться?
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
21.02.2014, 16:52 #16
К сожалению, не все компиляторы соответствуют Стандарту.
0
Вованя
137 / 134 / 63
Регистрация: 20.02.2014
Сообщений: 478
Завершенные тесты: 1
21.02.2014, 17:02 #17
Цитата Сообщение от ValeryS Посмотреть сообщение
кто пытается подловить?
Тогда приношу извинения, воспринял за выпад, ибо читать такое явно не от новичка по крайней мере странно.
Мое сообщение - это ответ на вопрос ТС, и если не выдергивать из контекста, то все укладывается
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
21.02.2014, 17:04 #18
Цитата Сообщение от Вованя Посмотреть сообщение
Тогда приношу извинения, воспринял за выпад,
ладно, проехали
0
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 17:23  [ТС] #19
Kuzia domovenok, 6ая. Не пробовал. Да и смысла нет. Так то я знал, что работать с "переменными" массивами в с++ можно через указатели и векторы. Но не понятно было почему не работает в функции, которой уж передали значение. То есть фактически значение есть, и оно не переменное. Но выше объяснили, что размер должен быть константой уже в момент компиляции, а не процессе исполнения) Так что вопрос закрыт был сразу)

p.s. а тему закрыть может только админ?
0
21.02.2014, 17:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 17:23
Привет! Вот еще темы с решениями:

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

А что находится внутри функции MessageBox или как еще можно создать MessageBox?
Помните сказку о лягушке-царевне? Что необходимо было сделать, чтобы убить...

Из двух упорядоченных массивов размера n и m соответственно создать упорядоченный массив размера n+m
Из двух числовых упорядоченных одномерных массивов размера n и m...

Создать метод с названием idDiagonal. который проверяет, отвечает ли массив заданный аргументом всем условия
Здравствуйте, тут есть люди которые в этом разбираются, начал учить джаву, но...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru