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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.93
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

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

05.12.2011, 06:34. Просмотров 3506. Ответов 47
Метки нет (Все метки)

2 вопроса.
2 подвопроса =).

1) Как инициализировать динамическую матрицу?
Желательно через new и delete, но можно и другое.
2) Как передавать эту матрицу в функцию?
а) Прототип функции.
б) Как обращаться к матрице внутри функции?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 06:34     Как инициализировать динамическую матрицу?
Посмотрите здесь:

Как объявить динамическую матрицу - C++
Как объявить динамическую матрицу

Как добавить k столбцов в динамическую матрицу? - C++
Программка работает некорректно, в чем ошибка? #pragma argsused #include <iostream.h> #include <conio.h> int i,j; ...

Как инициализировать двумерную матрицу натуральными логарифмами? - C++
Всем привет, столкнулся с небольшой проблемой, мне нужно инициализировать матрицу в таком виде: A = { {ln2,...

Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл??? - C++
Подскажите кто-нибудь, как записать квадратную динамическую матрицу в файл??? Вот я её заполнил: #include<iostream> #include<stdio.h>...

Сделать динамическую матрицу - C++
Имеется код для статической матрицы, как сделать её динамической? #include <stdio.h> #include <math.h> #include <conio.h> #include...

Добавление столбца в динамическую матрицу - C++
Доброго времени суток. Возникла проблема с методом добавления столбца в динамическую матрицу. Подскажите ошибку, пожалуйста void...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Заблокирован
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; - тут вы инициализируете переменную, записвая значение в выделенную для нее память
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, это разница между инициализацией и присвоением.

Но какая разница между инициализацией и выделением памяти - вот этого я.. не понимаю)
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:32     Как инициализировать динамическую матрицу? #21
Цитата Сообщение от Bers Посмотреть сообщение
это разница между инициализацией и присвоением.
Но какая разница между инициализацией и выделением памяти - вот этого я.. не понимаю)
WIKI::
In computing, an uninitialized variable is a variable that is declared but is not set to a definite known value before it is used. It will have some value, but not a predictable one. As such it is a programming error and a common source of bugs in software.
Присвоение знячения и есть инициализация

Добавлено через 3 минуты
C++
1
2
int n; //создадим переменную она тут только объявлена. но не инициализирована
n = 4; *//это уже присвоение. и это и есть инициализация
Bers
Заблокирован
06.12.2011, 04:35     Как инициализировать динамическую матрицу? #22
Цитата Сообщение от greeezz Посмотреть сообщение
int n; //создадим переменную она тут только объявлена. но не инициализирована
Думаешь, она не содержит значения?)
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:35     Как инициализировать динамическую матрицу? #23
Цитата Сообщение от Bers Посмотреть сообщение
C++
1
2
3
4
5
int n=0; //создадим переменную
            //она ещё при создании инициализируется нулём
n = 4; //это уже присвоение. 
          //То есть, переменная содержала ноль, а теперь
          //будит содержать 4
так точно.

Добавлено через 24 секунды
Цитата Сообщение от Bers Посмотреть сообщение
Думаешь, она не содержит значения?)
там мусор.
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
06.12.2011, 04:36  [ТС]     Как инициализировать динамическую матрицу? #24
в общем тему лучше закрыть, ибо вместо того чтобы помочь, ребята решили поспорить о своих делах.
спасибо, в общем ответ дан.
alkagolik
Заблокирован
06.12.2011, 04:38     Как инициализировать динамическую матрицу? #25
отдельная функция выделяет память, а инициализация проходит в теле цикла for()
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
 
int **init (size_t n, size_t m, size_t size)
{
    int **t;
    short i = 0;
 
    t = (char **)malloc(n * size);
    if ( !t )
        exit( -1 );
    else
    {
        while( i < n )
        {
            t[ i ] = malloc(m * size);
            if ( !t[ i ] )
                exit( -1 );
            ++i;
        }
    }
    return t;
}
 
int main( void )
{
    int n = 10, m = 10;
    int i = 0, j;
    int **matr;
 
    matr = init (n, m, sizeof(int));
 
    for ( i = 0 ; i < n; ++i )
    {
        puts("");
        for ( j = 0; j < m; ++j)
            {
                matr[ i ][ j ] = rand() % 2;
                printf("%i ", matr[ i ][ j ]);
            }
    }
    for(i = 0; i < n; ++i)
        free(matr[ i ]);
    free(matr);
 
    return 0;
}
Цитата Сообщение от Bers Посмотреть сообщение
//создадим переменную //она уже проиницилизирована. //Допустим, мусором.
нет, это область памяти, в которой есть информация. Инициализация - это заполнение своей, если угодно - нужной, первоначальной информацией этой области памяти.
Bers
Заблокирован
06.12.2011, 04:39     Как инициализировать динамическую матрицу? #26
Цитата Сообщение от greeezz Посмотреть сообщение
там мусор.
Ну во первых, далеко не факт, что там будит мусор. У глобальных интов например, при дефолтной инициализации будит нолик.

А во-вторых, абсолютно не важно чем именно инициализируется переменная.
важно, что:
C++
1
2
int n; //после выполнения инструкции 
         //уже будит проинициализирован.
а в этом моменте уже не инициализация, а присвоение:

C++
1
n=10;
alkagolik
Заблокирован
06.12.2011, 04:43     Как инициализировать динамическую матрицу? #27
Bers, вы никогда не думали почему при форматировании дисков с другую ФС всегда можно полноценно восстановить информацию? потому что информация никуда не исчезает, исчезает структура ее предствления. Иногда можно и полностью воссоздать первоначальную структуру без потери информации на носителе. Это я к тому что захватив участок памяти машина ею просто владеет пока не будет получена инструкция уничтожить данные и метод только один - это поместить туда новые данные.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
06.12.2011, 04:44     Как инициализировать динамическую матрицу? #28
Цитата Сообщение от greeezz Посмотреть сообщение
Присвоение знячения и есть инициализация
Бред. Выкиньте это из головы.
alkagolik
Заблокирован
06.12.2011, 04:44     Как инициализировать динамическую матрицу? #29
C
1
int n
это захват участка памяти
C
1
n = 0
это его инициализация. Установка в исходное положение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 04:46     Как инициализировать динамическую матрицу?
Еще ссылки по теме:

Выделение памяти под динамическую матрицу в С - C++
Люди помогите с 2 вопросами а то я чет не понимаю 1.Выделение памяти под динамическую матрицу в С(напише плиз как обьявлется матрица и...

Дополнить матрицу столбцом, содержащим максимумы по строкам. Использовать динамическую память - C++
Помогите пожалуйста исправить код. Вместо столбца, содержащего максимумы по строкам, выводит первый столбец. #include &lt;iostream&gt; ...

Дополнить матрицу столбцом, содержащим максимумы по строкам. Использовать динамическую память - C++
Дополнить матрицу столбцом, содержащим максимумы по строкам. Использовать динамическую память.(Нужно максимально простое решение, для...

Как инициализировать переменные? - C++
Здравствуйте. Где можно полно осведомиться о том как инициализируются переменные в C++ для каждого типа?

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


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

Или воспользуйтесь поиском по форуму:
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
06.12.2011, 04:46     Как инициализировать динамическую матрицу? #30
Chelioss,
Bers,
Керниган,Ритчи - Программирование на C.
глава 2.4.
Yandex
Объявления
06.12.2011, 04:46     Как инициализировать динамическую матрицу?
Ответ Создать тему
Опции темы

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