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

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

Восстановить пароль Регистрация
 
Александр918
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 4
21.06.2013, 22:59     Выделение памяти под двумерный массив С++ #1
Гуру С++, подскажите новичку, как обратиться к элементу при следующем выделении памяти?
1)double **matr = new double *[row]
2)double *matr = new double [row*n]
В первом случае вроде бы так: *(*(matr+i)+j), а как во втором?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
21.06.2013, 23:04     Выделение памяти под двумерный массив С++ #2
Цитата Сообщение от Александр918 Посмотреть сообщение
В первом случае вроде бы так: *(*(matr+i)+j), а как во втором?
а нормальные пути тебе уже не нравятся
1 matr[i][j]
2 mart[i*row+j]
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 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
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
21.06.2013, 23:45     Выделение памяти под двумерный массив С++ #4
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
В вашем втором случае вы только захватите память под первую строку матрицы размером row * n
это называется квазидвумерный массив
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
21.06.2013, 23:56     Выделение памяти под двумерный массив С++ #5
@ValeryS, Не совсем понял, это как?)
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
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     Выделение памяти под двумерный массив С++
Ответ Создать тему
Опции темы

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