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

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

Войти
Регистрация
Восстановить пароль
 
 
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
#1

Массив произвольного значения - C++

02.07.2011, 18:06. Просмотров 1003. Ответов 22
Метки нет (Все метки)

Здравствуйте, как построить массив заранее неизвестного значения, ну например
Код
int n;
cin >> n;
int arr[n];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2011, 18:06     Массив произвольного значения
Посмотрите здесь:

Динамический массив произвольного размера - C++
динамический массив заданного размера: int *massiv = new int а как организовать произвольного размера? спасибо.

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

Корень произвольного степени из произвольного числа, введенного с клавиатуры - C++
Не применяя встроенных функций, найти корень произвольного степени из произвольного числа, введенного с клавиатуры. Из четырех первых цифр...

Динамический массив элементов произвольного типа - C++
Доброго времени суток. Будьте так добры, если вас не затруднит, помочь "понимающему дубу" с одной назойливой программкой. С...

Вставка в одномерный массив произвольного элемента. - C++
Переменные объявлены глобально. Вот функции для получения рандомного числа и самой вставки. int GetRandom1(int rand_count) { using...

Можно ли передать в функцию массив произвольного размера ? - C++
Хочу создать функцию для детекта количества элементов в массиве sizeof(array)/sizeof(array); и надо чтобы функция принимала...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.07.2011, 18:08     Массив произвольного значения #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <new>
//...
int n, *arr;
cin >> n;
try{
  arr = new int[n];
}
catch(bad_alloc xa){
  cerr << "error" << endl;
  return 1;
}
//...
delete[] arr;
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 18:31  [ТС]     Массив произвольного значения #3
Когда одномерный массив все работает нормально, но вот с 2 мерным массивом уже проблемы
на этот код
C++
1
2
3
4
5
6
7
8
9
10
    int n,m, *arr;
    cin >> n;
    cin >> m;
    try{
        arr = new int[n][m];
    }
    catch(bad_alloc xa){
        cerr << "error" << endl;
        return 1;
    }
Выдает

Ошибка 1 error C2540: неконстантное выражение используется в качестве границы массива c:\documents and settings\rustam\мои документы\visual studio 2008\projects\project2\1\1\1.cpp 31
Ошибка 2 error C2440: =: невозможно преобразовать 'int (*)[1]' в 'int *' c:\documents and settings\rustam\мои документы\visual studio 2008\projects\project2\1\1\1.cpp 31
nameless
Эксперт C++
333 / 297 / 14
Регистрация: 16.06.2009
Сообщений: 486
02.07.2011, 18:33     Массив произвольного значения #4
hepr,

Если двумерный массив, то так:

C++
1
2
3
int** arr = new int * [n];
for (int i = 0; i < n; ++i)
    *(arr + i) = new int [m];
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 18:45  [ТС]     Массив произвольного значения #5
Спасибо, а не могли бы вы объяснить что вы делаете
nameless
Эксперт C++
333 / 297 / 14
Регистрация: 16.06.2009
Сообщений: 486
02.07.2011, 18:54     Массив произвольного значения #6
Цитата Сообщение от hepr Посмотреть сообщение
Спасибо, а не могли бы вы объяснить что вы делаете
Цитата Сообщение от nameless Посмотреть сообщение
int** arr = new int * [n];
Выделяем память под массив указателей,

Цитата Сообщение от nameless Посмотреть сообщение
for (int i = 0; i < n; ++i)
*(arr + i) = new int [m];
Выделяем память под массивы..
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:03  [ТС]     Массив произвольного значения #7
Вроде все понятно, кроме этого
C++
1
*(arr + i)
Что это значит?
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
02.07.2011, 19:03     Массив произвольного значения #8
hepr, arr[i] <=> *(arr + i)
grizlik78
02.07.2011, 19:06
  #9

Не по теме:

А ещё извращённая форма есть
i[arr]

hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:08  [ТС]     Массив произвольного значения #10
Я понимаю что это равносильно arr[i], вопрос в другом, что это за конструкция arr+i, где arr массив
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
02.07.2011, 19:10     Массив произвольного значения #11
Имя массива рассматривается как указатель на его первый элемент. Поэтому работает арифметика указателей и arr+i определяет указатель на элемент с индексом i
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:11  [ТС]     Массив произвольного значения #12
И еще один вопрос, если позволите, разве теперь нельзя обращаться к массиву как к двумерному
C++
1
    cin >> arr[1][1];
Пишет Ошибка 4 error C2109: для индекса требуется массив или указатель c:\documents and settings\rustam\мои документы\visual studio 2008\projects\project2\1\1\1.cpp 29

Добавлено через 41 секунду
Цитата Сообщение от grizlik78 Посмотреть сообщение
Имя массива рассматривается как указатель на его первый элемент. Поэтому работает арифметика указателей и arr+i определяет указатель на элемент с индексом i
Спасибо, теперь ясно
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
02.07.2011, 19:12     Массив произвольного значения #13
Можно. Показывай объявление arr.
nameless
Эксперт C++
333 / 297 / 14
Регистрация: 16.06.2009
Сообщений: 486
02.07.2011, 19:14     Массив произвольного значения #14
Цитата Сообщение от hepr Посмотреть сообщение
Я понимаю что это равносильно arr[i], вопрос в другом, что это за конструкция arr+i, где arr массив
arr изначально указывает на нулевой элемент массива, таким образом выполняя операцию (arr + i) мы увеличиваем arr на i * sizeof(int*), т. е на i-й элемент.
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:16  [ТС]     Массив произвольного значения #15
Если *arr, то пишет указанную ошибку
Если **arr, то пишет что arr используют без предварительной инициализации
Run-Time Check Failure #3 - The variable 'arr' is being used without being initialized.
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.07.2011, 19:18     Массив произвольного значения #16
весь код выложи
grizlik78
Эксперт С++
1903 / 1435 / 109
Регистрация: 29.05.2011
Сообщений: 2,990
02.07.2011, 19:18     Массив произвольного значения #17
Давай уж код выкладывай. Телепатические помехи в эфире.
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:22  [ТС]     Массив произвольного значения #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int n,m, **arr; //или *arr
    n = m = -1;
        cin << n;
        cin << m;
    try{
        int** arr = new int * [n];
        for (int i = 0; i < n; ++i)
            *(arr + i) = new int [m];
    }
    catch(bad_alloc xa){
        cerr << "error" << endl;
        return 1;
    }
        arr[1][1] = 1;
    cin >> arr[1][1];
    cout << arr[1][1];
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
02.07.2011, 19:26     Массив произвольного значения #19
Цитата Сообщение от hepr Посмотреть сообщение
int** arr = new int * [n];
arr = new int * [n];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 19:28     Массив произвольного значения
Еще ссылки по теме:

Выберите все четные элементы произвольного одномерного массива в другой массив - C++
Выберете все четные элементы произвольного одномерного массива в другой массив

Выбрать все нечетные элементы произвольного одномерного массива в другой массив - C++
Выбрать все нечетные элементы произвольного одномерного массива в другой массив

Написать программу, в которой создается двухмерный массив, значения вводятся с клавиатуры,потом значения умножаются по строкам - access violation - C++
Здравствуйте. Задание написать программу в которой создается 2-х мерный массив (размер вводится с клавиатуры),значения так же вводяться с...

Записать в массив B длины всех серий исходного массива, а в массив C - значения элементов, образующих серии - C++
Ребята выручите пожалуйста) 1)Дан целочисленный массив A размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной...

Массив теряет значения:/ - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; #include &lt;audiere.h&gt; using namespace std; using namespace audiere;...


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

Или воспользуйтесь поиском по форуму:
nameless
Эксперт C++
333 / 297 / 14
Регистрация: 16.06.2009
Сообщений: 486
02.07.2011, 19:28     Массив произвольного значения #20
Цитата Сообщение от hepr Посмотреть сообщение
C++
1
2
3
4
5
    try{
        int** arr = new int * [n];
        for (int i = 0; i < n; ++i)
            *(arr + i) = new int [m];
    }
Зачем в блоке try еще раз объявили arr?
Yandex
Объявления
02.07.2011, 19:28     Массив произвольного значения
Ответ Создать тему
Опции темы

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