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

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

Войти
Регистрация
Восстановить пароль
 
Александр918
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 4
#1

Выделение памяти под двумерный массив С++ - C++

21.06.2013, 22:59. Просмотров 614. Ответов 5
Метки нет (Все метки)

Гуру С++, подскажите новичку, как обратиться к элементу при следующем выделении памяти?
1)double **matr = new double *[row]
2)double *matr = new double [row*n]
В первом случае вроде бы так: *(*(matr+i)+j), а как во втором?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 22:59     Выделение памяти под двумерный массив С++
Посмотрите здесь:

C++ Динамическое выделение памяти под двумерный массив
Динамическое выделение памяти под двумерный массив C++
C++ Выделение памяти под массив структур
Выделение памяти под массив C++
Выделение памяти под двумерный массив C++
Выделение памяти под массив строк C++
C++ Выделение памяти под двумерный массив
Динамическое выделение памяти под массив C++
Правильно ли в приведенном примере реализовано выделение и очищение памяти под двумерный вектор C++
Динамическое выделение памяти под двумерный массив C++
C++ Выделение памяти под динамический двумерный массив в структуре
Двумерный Массив,динамическое выделение памяти-ошибка C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6453 / 4919 / 451
Регистрация: 14.02.2011
Сообщений: 16,320
21.06.2013, 23:04     Выделение памяти под двумерный массив С++ #2
Цитата Сообщение от Александр918 Посмотреть сообщение
В первом случае вроде бы так: *(*(matr+i)+j), а как во втором?
а нормальные пути тебе уже не нравятся
1 matr[i][j]
2 mart[i*row+j]
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
21.06.2013, 23:05     Выделение памяти под двумерный массив С++ #3
C++
1
2
3
4
5
6
double **mass = new double [row]; // захват памяти под row столбцов
 
for (int i  = 0; i < row; i++)
{
   *(mass + i) = new double [col];  // захват памяти под каждую строку
}
дальше в коде например можно как mass[i][j] или *(*(mass + i) + j)

В вашем втором случае вы только захватите память под первую строку матрицы размером row * n
ValeryS
Модератор
6453 / 4919 / 451
Регистрация: 14.02.2011
Сообщений: 16,320
21.06.2013, 23:45     Выделение памяти под двумерный массив С++ #4
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
В вашем втором случае вы только захватите память под первую строку матрицы размером row * n
это называется квазидвумерный массив
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
21.06.2013, 23:56     Выделение памяти под двумерный массив С++ #5
@ValeryS, Не совсем понял, это как?)
ValeryS
Модератор
6453 / 4919 / 451
Регистрация: 14.02.2011
Сообщений: 16,320
22.06.2013, 00:19     Выделение памяти под двумерный массив С++ #6
ну например тебе нужно выделить память под такой массив
123
456
789
выделяешь как под одномерный
C++
1
2
3
4
5
int * arr=new int[3*3]
// и обращаешься так
for(int i=0;i<3;i++)
 for(int j=0;j<3;j++)
   arr[i*3+j] =i*3+j+1;
в памяти будет выделен один блок на 9 int
123456789
а не три блока по три int плюс еще блок на 3 указателя
данные лежат рядом как в статическом массиве
экономится память
недостаток
обращаться к членом массива не совсем удобно
Yandex
Объявления
22.06.2013, 00:19     Выделение памяти под двумерный массив С++
Ответ Создать тему
Опции темы

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