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

массив - C++

Восстановить пароль Регистрация
 
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
21.04.2011, 09:52     массив #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
cout<<"Enter n:"<<endl;
        int n;
        cin>>n;
        cout<<"Enter m:"<<endl;
        int m;
        cin>>m;
 
        int** M=new int*[n];
        int i;
        for(i=0; i<n; i++)
        {
                M[i]=new int[m];
        }
поясните чайнику что значит int** M=new int*[n];
C++
1
2
3
4
5
        int i;
        for(i=0; i<n; i++)
        {
                M[i]=new int[m];
        }
что за int** M на что она ссылается и на что ссылается new int*[n] и зачем тут операция присвоения
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 09:52     массив
Посмотрите здесь:

C++ с клавиатуры ввести массив,во второй массив записать нечетные элементы из первого
Можно ли в классе создавать массив переменной длинны. Например динамический массив? C++
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. C++
C++ Массив: сформировать массив C[12] так, чтобы элементы располагались следующим образом: A(1) B(1) A(2) B(2)
Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.04.2011, 10:50     массив #2
Цитата Сообщение от .Malek. Посмотреть сообщение
поясните чайнику что значит int** M=new int*[n];
Динамическое выделение памяти
Цитата Сообщение от .Malek. Посмотреть сообщение
что за int** M на что она ссылается и на что ссылается new int*[n] и зачем тут операция присвоения
int ** - этой указатель на указатель типа int. То есть M - это массив указателей. Для каждого из этих указателей так же выделяется память, и каждый из этих указателей в свою очередь ссылается на участок памяти.
В общем здесь происходит динамическое выделение памяти для матрицы.
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
21.04.2011, 10:55  [ТС]     массив #3
т.е. если взять для примера матрицу
123
456
789
то операцией new int*[n] мы выделяем память для столбца 147 и присваиваем М?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.04.2011, 11:17     массив #4
Цитата Сообщение от .Malek. Посмотреть сообщение
то операцией new int*[n] мы выделяем память для столбца 147 и присваиваем М?
вообще так выделяется память под любой массив. и в случае, если этот массив часть матрицы то это будет строка, а не столбец.
В общем взгляни на картинку.
массив
Сначала имеется указатель int **M. Он ни на что не указывает, следовательно пока что он не валиден. Затем к нему применяется операция new int *[n]. Здесь выделяется память на массив указателей типа int. Указатель `M' теперь указывает именно на этот массив. Каждый из указателей в массиве M[0], M[1] ... M[n-1] пока еще не валиден. На следующем этапе в цикле выделяется память для каждого из этих указателей. То есть в итоге получается, что M - это массив массивов. В общем на картинке я думаю это все более понятно будет, чем на словах.
И очень важно очищать память после использования. В порядке обратном выделению, то есть сначала для каждого M[i], а потом для M.
Yandex
Объявления
21.04.2011, 11:17     массив
Ответ Создать тему
Опции темы

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