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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
#1

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

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

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

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

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

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

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

Как можно создать массив разных объектов, заранее неизвестного размера? - C#
если нужно создать несколько однотипных объектов программно то один скажем, создается кодом myobj: myname=new myobj(); Но это когда...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Вованя
131 / 131 / 47
Регистрация: 20.02.2014
Сообщений: 453
21.02.2014, 14:48 #2
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
21.02.2014, 14:49 #3
Размер массива должен быть константой этапа компиляции.
В данном случае память нужно выделять динамически (см new)
JJsmall
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 4
21.02.2014, 14:51  [ТС] #4
Всех благодарю. Ясно.)
THE--MASTER
Заблокирован
21.02.2014, 14:51 #5
Цитата Сообщение от JJsmall Посмотреть сообщение
компилятор ругается.
правильно, что ругается, т.к. какой размер массива ты засунешь в функцию никто кроме тебя не знает - по этому он не может заранее рассчитать, сколько тебе потребуется памяти. Статический массив помжно создать только определённого заранее известного размера
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.02.2014, 14:54 #6
Так можно, если компилятор поддерживает VLA.
GCC поддерживает VLA уже давно.
THE--MASTER
Заблокирован
21.02.2014, 15:00 #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  [ТС] #8
Вновь всем спс.)
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.02.2014, 15:19 #9
Цитата Сообщение от Вованя Посмотреть сообщение
В С++ нет, в Си возможно.
а интересно почему нельзя в С++
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
21.02.2014, 15:25 #10
Цитата Сообщение от ValeryS Посмотреть сообщение
а интересно почему нельзя в С++
По стандарту же
Технических ограничений кроме размера стека - нет
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.02.2014, 16:00 #11
Цитата Сообщение от DrOffset Посмотреть сообщение
По стандарту же
что по стандарту?

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

Речь про массивы с неконстантным размером:
C++
1
int a[n];
где n - переменная.
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
И такой массив создается на стеке.
Аналог - функция alloca.
Вованя
131 / 131 / 47
Регистрация: 20.02.2014
Сообщений: 453
21.02.2014, 16:28 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от Вованя
В С++ нет, в Си возможно. Создай этот массив в куче и работай, как с обычным массивом.
т.е в Си можно создать массив в куче
а в плюсах нет
Зачем читаешь между строк и при этом пытаешься "подловить" глупыми наводящими вопросами о куче?
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.02.2014, 16:44 #14
Цитата Сообщение от Вованя Посмотреть сообщение
Зачем читаешь между строк и при этом пытаешься "подловить"
кто пытается подловить?
перечитай еще раз свое сообщение
из него следует что динамическое выделение возможно в Си, а в плюсах нет
Цитата Сообщение от DrOffset Посмотреть сообщение
Такой массив разрешен в Си99 и запрещен в С++ по стандарту.
у меня из Си компиляторов только Keil и он такую конструкцию не переваривает
спасибо, буду знать
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
21.02.2014, 16:52 #15
А какая у тебя студия? Файл с расширением .c пробовал компилировать? На "переменные массивы" продолжает ругаться?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2014, 16:52
Привет! Вот еще темы с ответами:

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

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

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

Можно ли создать массив, элементами которого являются функции? - Turbo Pascal
можно ли создать массив, элементами которого являются функции? То есть, в ячейках записаны уравнения функций


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.02.2014, 16:52
Ответ Создать тему
Опции темы

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