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

Как инициализировать динамическую матрицу? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
05.12.2011, 06:34     Как инициализировать динамическую матрицу? #1
2 вопроса.
2 подвопроса =).

1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
2) Как передавать эту матрицу в функцию?
а) Прототип функции.
б) Как обращаться к матрице внутри функции?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nastya24
 Аватар для Nastya24
32 / 18 / 4
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 08:35     Как инициализировать динамическую матрицу? #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int**mas=new int *[f];
for( int i=0;i<f;i++)     
mas[i]=new int[f];
 
for( int i=0;i<f;i++)  
for( int j=0;j<f;j++) 
mas[i][j]=...            
 
for( int i=0;i<f;i++)
delete [] mas[i];    
delete [] mas;
 
void funk(int **&matr)
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
05.12.2011, 10:39     Как инициализировать динамическую матрицу? #3
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
Nastya24
 Аватар для Nastya24
32 / 18 / 4
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:17     Как инициализировать динамическую матрицу? #4
Цитата Сообщение от co6ak Посмотреть сообщение
C++
1
void funk(int **&matr)
не дохрена ли символов?
не надо амперсант. просто две звезды
Без & значение matr в другую функцию передаваться не будет
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
05.12.2011, 11:22     Как инициализировать динамическую матрицу? #5
Цитата Сообщение от Nastya24 Посмотреть сообщение
Без & значение matr в другую функцию передаваться не будет
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
Nastya24
 Аватар для Nastya24
32 / 18 / 4
Регистрация: 30.09.2011
Сообщений: 59
05.12.2011, 11:23     Как инициализировать динамическую матрицу? #6
Цитата Сообщение от co6ak Посмотреть сообщение
с какова это бодуна?
смотри вот сюда ))
и попробуй скомпилить. все замечательно работает
Да ты крут ёпте)
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.12.2011, 12:46     Как инициализировать динамическую матрицу? #7
когда функция должна поменять значение в указателе, тогда нужна ссылка
когда нужно просто проинициализировать матрицу, достаточно указатель передать (и размерность обязательно)
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 02:53  [ТС]     Как инициализировать динамическую матрицу? #8
Nastya24,

поподробнее можно?

C++
1
2
3
4
5
6
7
int**mas=new int *[f];
for( int i=0;i<f;i++)     
mas[i]=new int[f];
 
for( int i=0;i<f;i++)  
for( int j=0;j<f;j++) 
mas[i][j]=...
f размер? то есть кол-во строк*кол-во столбцов?

int**mas=new int *[f];
for( int i=0;i<f;i++)
mas[i]=new int[f];
иницилазируем матрицу, инициализируем f массивов(f строк), так?

for( int i=0;i<f;i++)
for( int j=0;j<f;j++)
mas[i][j]=...
собственно заполняем массив? так?

Добавлено через 5 минут
Как из программы обращаться к функции void funk(int **&matr) ?

C++
1
funk(mas)
?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
06.12.2011, 02:58     Как инициализировать динамическую матрицу? #9
Цитата Сообщение от Nastya24 Посмотреть сообщение
mas[i][j]=...
Это не инициализация, а присваивание.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 03:35  [ТС]     Как инициализировать динамическую матрицу? #10
Цитата Сообщение от VladSharikov Посмотреть сообщение
mas[i][j]=...
собственно заполняем массив? так?
я знаю.
Цитата Сообщение от VladSharikov Посмотреть сообщение
int**mas=new int *[f];
for( int i=0;i<f;i++) * *
mas[i]=new int[f];
инициализация - это.
в любом случае, не придирайтесь к терминам.

есть что-то по моим вопросам?

Добавлено через 15 минут
Настя,

f в вашей программе, что это?

Добавлено через 6 минут
количество линий?
Bers
Заблокирован
06.12.2011, 03:50     Как инициализировать динамическую матрицу? #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
f в вашей программе, что это?
количество элементов массива) каждый элемент - указатель на ещё один массив)
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
06.12.2011, 03:52     Как инициализировать динамическую матрицу? #12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
 
void init (char *x, short n, short m)
{
    short i = 0, num = m * n;
    while( i < num)
    {
        x[ i ] = rand() % 2;
        ++i;
    }
}
 
int main( void )
{
    char n = 10, m = 10;
    char i = 0, j;
    char matr[ n ][ m ];
 
    init (&matr, n, m);
 
    for ( i ; i < n; ++i )
    {
        puts("");
        for ( j = 0; j < m; ++j)
            printf("%i ", matr[ i ][ j ]);
    }
 
    return 0;
}
Bers
Заблокирован
06.12.2011, 03:54     Как инициализировать динамическую матрицу? #13
alkagolik, в задании речь идет:


Цитата Сообщение от VladSharikov Посмотреть сообщение
1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
У вас:

Цитата Сообщение от alkagolik Посмотреть сообщение
char matr[ n ][ m ];
Стековый)

Итого: вы решили совсем другую задачу)
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 03:55  [ТС]     Как инициализировать динамическую матрицу? #14
Может быть количество строк матрицы?

То есть мы делаем f массивов, размера f или как?
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 03:56     Как инициализировать динамическую матрицу? #15
C++
1
2
3
int**mas=new int *[f];    //ТУТ КОЛИЧЕСТВО СТРОК
.....
mas[i]=new int[f]; // ТУТ КОЛИЧЕСТВО КОЛОНОК
Bers
Заблокирован
06.12.2011, 03:58     Как инициализировать динамическую матрицу? #16
вот здесь получается матрица f на f
C++
1
2
3
4
5
6
7
8
9
10
11
int**mas=new int *[f];
for( int i=0;i<f;i++) *mas[i]=new int[f];
 
for( int i=0;i<f;i++) *
    for( int j=0;j<f;j++) 
                      mas[i][j]=... * * * * * *
 
for( int i=0;i<f;i++)  delete [] mas[i]; * *
 
delete [] mas;
void funk(int **&matr)

Не по теме:

заколебали эти звездочки, я не буду их стирать

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
06.12.2011, 04:01     Как инициализировать динамическую матрицу? #17
Цитата Сообщение от Bers Посмотреть сообщение
Итого: вы решили совсем другую задачу)
нет, это я всего лишь показал что инициализировать n - мерный массив можно так же как и одномерный, а по сабжу уже ответили. Сейчас напишу как на Си это делается. И к тому же (хоть я и придираюсь к терминам) инициализировать и выделять память это вроде разные вещи (это к ТС).
Bers
Заблокирован
06.12.2011, 04:13     Как инициализировать динамическую матрицу? #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от alkagolik Посмотреть сообщение
инициализировать и выделять память это вроде разные вещи
А в чем разница то?
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:19     Как инициализировать динамическую матрицу? #19
Цитата Сообщение от Bers Посмотреть сообщение
А в чем разница то?
насколько я понимаю
int n; - тут компилятор знает только сколько памяти вам надо для вашей переменной.
n = 4; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 04:25     Как инициализировать динамическую матрицу?
Еще ссылки по теме:

C++ Как объявить указатель на массив через typedef и как инициализировать такой тип
C++ Как инициализировать массивы?
C++ Как добавить k столбцов в динамическую матрицу?

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
06.12.2011, 04:25     Как инициализировать динамическую матрицу? #20
Цитата Сообщение от greeezz Посмотреть сообщение
насколько я понимаю
int n; - тут компилятор знает только сколько памяти вам надо для вашей переменной.
n = 4; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
Ну нееет.

C++
1
2
3
4
5
int n; //создадим переменную она уже проиницилизирована. 
         //Допустим, мусором.
 
n = 4;  //это уже присвоение. То есть, изменение состояния уже 
          //существующей переменной

другой пример:

C++
1
2
3
4
5
6
int n=0; //создадим переменную
            //она ещё при создании инициализируется нулём
 
n = 4;  //это уже присвоение. 
           //То есть, переменная содержала ноль, а теперь
          //будит содержать 4

Третий пример:
C++
1
2
3
4
5
Some myClass = 10; //инициализация. 
    //Запустится конструктор, принимающий аргумент int
 
myClass=20; //присвоение.
    // Запустится operator=, который принимает аргумент int
Добавлено через 1 минуту
greeezz, это разница между инициализацией и присвоением.

Но какая разница между инициализацией и выделением памяти - вот этого я.. не понимаю)
Yandex
Объявления
06.12.2011, 04:25     Как инициализировать динамическую матрицу?
Ответ Создать тему
Опции темы

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