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

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

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

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

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

Здравствуйте, как построить массив заранее неизвестного значения, ну например
Код
int n;
cin >> n;
int arr[n];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2011, 18:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив произвольного значения (C++):

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

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

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

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

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

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

22
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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;
1
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
0
nameless
Эксперт С++
334 / 298 / 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];
1
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 18:45  [ТС] #5
Спасибо, а не могли бы вы объяснить что вы делаете
0
nameless
Эксперт С++
334 / 298 / 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];
Выделяем память под массивы..
1
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:03  [ТС] #7
Вроде все понятно, кроме этого
C++
1
*(arr + i)
Что это значит?
0
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
02.07.2011, 19:03 #8
hepr, arr[i] <=> *(arr + i)
1
grizlik78
02.07.2011, 19:06
  #9

Не по теме:

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

0
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
02.07.2011, 19:08  [ТС] #10
Я понимаю что это равносильно arr[i], вопрос в другом, что это за конструкция arr+i, где arr массив
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
02.07.2011, 19:10 #11
Имя массива рассматривается как указатель на его первый элемент. Поэтому работает арифметика указателей и arr+i определяет указатель на элемент с индексом i
0
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
Спасибо, теперь ясно
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
02.07.2011, 19:12 #13
Можно. Показывай объявление arr.
0
nameless
Эксперт С++
334 / 298 / 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-й элемент.
0
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.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 19:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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